Oracle pl/sql 更新表的过程 - 异常处理

1 oracle plsql exception

这是我对 PL/SQL 的第一次查询,我确实花了一个小时试图在网上寻找答案,无论如何 - 就这样。

我正在编写一个更新表的过程,一切正常,但是当我输入更新job_id不存在的表时,我希望异常处理告诉我该表job_id无效,但是我没有收到错误消息。

我的代码如下:

CREATE OR REPLACE PROCEDURE UPD_JOB(p_job_id jobs.job_id%TYPE, p_jobnew jobs.job_title%TYPE)
IS
BEGIN
UPDATE JOBS SET job_title =p_jobnew WHERE JOB_ID = p_job_id;
EXCEPTION
WHEN NO_DATA_FOUND THEN DBMS_OUTPUT.PUT_LINE('No rows have been updated');
END;
/
Run Code Online (Sandbox Code Playgroud)

然后,我尝试更新一个我知道不存在的 job_id,通过输入以下内容来查看异常是否有效

EXECUTE UPD_JOB('ABCXXX','WILL FAIL');
Run Code Online (Sandbox Code Playgroud)

sti*_*bit 6

来自“处理 PL/SQL 错误”

NO_DATA_FOUND

SELECT INTO 语句不返回任何行,或者您的程序引用嵌套表中已删除的元素或索引表中未初始化的元素。SQL 聚合函数(例如 AVG 和 SUM)始终返回值或 null。因此,调用聚合函数的 SELECT INTO 语句永远不会引发 NO_DATA_FOUND。FETCH 语句预计最终不会返回任何行,因此当发生这种情况时,不会引发异常。

NO_DATA_FOUND您没有使用会导致引发异常的语句。

也许你可以使用SQL%ROWCOUNT. 来自“从 PL/SQL 执行 SQL 操作”

SQL%ROWCOUNT要了解有多少行受到 DML 语句的影响,您可以检查...的值

CREATE OR REPLACE PROCEDURE UPD_JOB (p_job_id jobs.job_id%TYPE,
                                     p_jobnew jobs.job_title%TYPE)
IS
BEGIN
  UPDATE JOBS
         SET job_title = p_jobnew
         WHERE JOB_ID = p_job_id;

  IF SQL%ROWCOUNT = 0 THEN
    DBMS_OUTPUT.PUT_LINE('No rows have been updated');
  END IF;
END;
/
Run Code Online (Sandbox Code Playgroud)