Oracle 更新/删除不存在行时的PL/SQL异常
最近我正在学习PL/SQL,目前正在使用oracle HR模式处理过程和异常 这是我的简单程序Oracle 更新/删除不存在行时的PL/SQL异常,oracle,plsql,Oracle,Plsql,最近我正在学习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('N
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.
然而,根据OraclePDF,它应该抛出一个异常,我应该真正得到我在异常中输入的消息
对不存在的记录进行更新时也发生了同样的情况。
请告知。谢谢没有“异常”-sql执行成功。它成功删除了所有符合条件的记录…即0条记录。如果执行了类似的update语句,情况也是如此。您使用SQL%NOTFOUND确定没有受影响的记录,但这并不意味着存在“异常”
如果您尝试使用“select into”子句,但未找到任何匹配的记录,则可能会出现NOU DATA FOUND异常。我相信
SQL%NOTFOUND
在未找到任何记录时返回true
。在这种情况下,IF
将计算为true,因此将put\u行写入终端。SQL语句已成功执行。如果您从命令行自行执行该SQL语句,您将收到0行更新/删除,而不是Oracle错误
如果要引发异常,可以在
If
中使用RAISE
,并将其指向要引发的异常块中的异常。为此,需要使用
IF SQL%ROWCOUNT = 0 THEN
RAISE no_delete;
END IF;
定义你的是的,我也这么认为,但“Oracle Database 11g Develop PL/SQL Program Units Vol1”pdf声明应该有例外。我只是想确认我没有遗漏任何东西,谢谢。