我这些天正在学习 PL/SQL,目前正在使用 oracle HR 模式处理过程和异常。
这是我的简单过程。
create or replace
PROCEDURE DEL_JOB
(p_jobid jobs.job_id%TYPE)
AS
sqle NUMBER;
sqlm VARCHAR2(300);
BEGIN
DELETE FROM JOBS
WHERE JOB_ID = UPPER(p_jobid);
IF SQL%NOTFOUND THEN
DBMS_OUTPUT.PUT_LINE('No such record');
END IF;
EXCEPTION
WHEN OTHERS THEN
sqle := SQLCODE;
sqlm := SQLERRM;
DBMS_OUTPUT.PUT_LINE('There is no job with this id that could be deleted');
DBMS_OUTPUT.PUT_LINE('Error Code ='||sqle||' Error message =' ||sqlm);
END;
当我执行此过程时,输出是
No such record
PL/SQL procedure successfully complete.
但是,根据 Oracle PDF,它应该抛出异常,并且我确实应该得到我在异常中输入的消息。
对于不存在的记录的更新也发生了同样的事情。
请指教。谢谢
我相信SQL%NOTFOUND
回报true
当没有找到记录时。你的IF
在这种情况下将评估为 true,因此将 put_line 写入终端。 SQL语句执行成功。如果您从命令行单独执行该 SQL 语句,您将收到 0 行更新/删除,而不是 Oracle 错误。
如果你想抛出异常,你可以使用RAISE
在你的里面IF
并将其指向您想要引发的异常块中的异常。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)