PLSQL存储过程的IN参数无效

问题描述 投票:0回答:1

在这个存储过程中,如果p_id不存在(我有1到1000的ID),或者添加错误信息 "ID未在此表中找到 "是无效的,我如何进行ID验证?

这是我的代码。

CREATE OR REPLACE PROCEDURE MyProc
(
  p_id IN NUMBER,
  ret_val OUT NUMBER
) AS
BEGIN
  ret_val := 0;
  BEGIN
    UPDATE Table1
       SET n_id = 2,
           n_date = SYSDATE
       WHERE n_id = p_id;
    ret_val := 1;
  EXCEPTION
    WHEN OTHERS THEN
         ret_val := -1;
  END;
END MyProc;
sql oracle plsql procedure
1个回答
0
投票

如果p_id无效,即输入一个非数字值,存储过程将隐式出错,Oracle会抱怨数据类型不匹配。

为了处理 "ID不在这个表中找到",你可以使用oracle隐式游标属性SQL%ROWCOUNT显式地引发异常。<p_id> ID not found in this table error.

CREATE OR REPLACE PROCEDURE MyProc
(
  p_id IN NUMBER,
  ret_val OUT NUMBER
) AS

BEGIN
ret_val := 0;

UPDATE Table1
SET n_id = 2,
n_date = SYSDATE
WHERE n_id = p_id;

ret_val := 1;

 IF (SQL%ROWCOUNT = 0) THEN
     ret_val := -1;
     RAISE_APPLICATION_ERROR(-20000,p_id||' - ID not found in this table ');
 END IF;

END MyProc;
/

参考dbfiddle的演示 https:/dbfiddle.uk?rdbms=oracle_18&fiddle=8436a79b7a2f7f37a4e9b8f324e37ab4。

© www.soinside.com 2019 - 2024. All rights reserved.