PL/SQL IN 参数无效的过程
PL/SQL Procedure with invalid IN parameter
如果 p_id 不存在(我的 ID 从 1 到 1000)或添加错误消息 "ID not found in this table" 无效,我如何在此过程中进行 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;
如果p_id无效,即提供非数字值作为输入该过程将出错 implicitly.Oracle 将抱怨数据类型不匹配。
要处理 "ID not found in this table",您可以在 oracle 隐式游标属性 SQL%ROWCOUNT.It 的帮助下显式引发异常,将 return <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
如果 p_id 不存在(我的 ID 从 1 到 1000)或添加错误消息 "ID not found in this table" 无效,我如何在此过程中进行 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;
如果p_id无效,即提供非数字值作为输入该过程将出错 implicitly.Oracle 将抱怨数据类型不匹配。
要处理 "ID not found in this table",您可以在 oracle 隐式游标属性 SQL%ROWCOUNT.It 的帮助下显式引发异常,将 return <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