【问题标题】:PL/SQL Procedure with invalid IN parameter带有无效 IN 参数的 PL/SQL 过程
【发布时间】:2020-09-09 12:20:02
【问题描述】:

如果 p_id 不存在(我的 ID 从 1 到 1000)或者添加错误消息“在此表中找不到 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】:

    如果 p_id 无效,即提供了一个非数字值作为输入,该过程将隐式出错。Oracle 将抱怨数据类型不匹配。

    要处理“ID not found in this table”,您可以借助 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

    【讨论】:

    • 我在 Table1 的 n_id 中有 1 到 1000 的值,如果 p_id 是 9876,我该如何制作此错误消息?
    • 我已更新代码以将 pid 与消息一起返回给调用。
    • 当我使用 MyProc(9999) 运行程序时;我只得到“PL/SQL 过程成功完成”。没有任何错误信息....
    猜你喜欢
    • 2022-01-05
    • 1970-01-01
    • 1970-01-01
    • 2016-01-03
    • 1970-01-01
    • 2012-04-15
    • 2015-01-19
    • 2015-06-18
    • 2014-08-13
    相关资源
    最近更新 更多