在oracle中执行过程期间检查错误

在oracle中执行过程期间检查错误,第1张

概述create or replace procedure proc_advertisement(CustomerID in Number,NewspaperID in number,StaffID in Number,OrderDate in date,PublishDate in date,Type in varchar, Status in varchar, Units @H_301_2@
create or replace procedure proc_advertisement(CustomerID in Number,NewspaperID in number,StaffID in Number,OrderDate in date,PublishDate in date,Type in varchar,Status in varchar,Units in number) is begin insert into PMS.Advertisement(CustomerID,NewspaperID,StaffID,OrderDate,PublishDate,Type,Status,Units) values(CustomerID,Units); dbms_output.put_line('Advertisement Order Placed Successfully'); end;

如何检查在执行过程期间是否发生任何错误,如果发生任何错误,我希望显示错误消息.

解决方法 首先,如果在运行过​​程时发生任何错误,Oracle本身将引发错误消息 – 例如:

ORA-02291: integrity constraint (EMP.MGR_FK) violated - parent key not Found

您可以通过编写异常处理程序来显式处理错误,但除非您做得好,否则您很可能只是混淆问题.例如,你可以简单地添加它(就在程序结束之前:

EXCEPTION    WHEN OTHERS THEN        RAISE_APPliCATION_ERROR(-20001,'An error occured');

但是现在你的用户不会知道什么样的错误,而在他们可以推断出指定的Manager不存在之前.你可以像这样显示原始错误:

EXCEPTION    WHEN OTHERS THEN        RAISE_APPliCATION_ERROR(-20001,'An error occured: '||sqlERRM);

如果这增加任何价值.或者您可以只显示一般错误,然后将sqlERRM的值写入日志表.

您还可以处理特定的例外情况:例如

PROCEDURE ... IS    e_invalID_fk EXCEPTION;    PRAGMA EXCEPTION_INIT(e_invalID_fk,-2291);BEGIN    ...EXCEPTION    WHEN e_invalID_fk THEN        IF sqlERRM liKE '%(EMP.MGR_FK)%' THEN            raise_application_error(-20001,'InvalID manager specifIEd');        ELSE           RAISE;        END IF;END;

注意RAISE:如果您的异常处理程序的任何部分没有发出RAISE或RAISE_APPliCATION_ERROR,那么您实际上是在地毯下扫描异常 – 用户会认为该过程有效.

顺便说一句,DBMS_OUTPUT.PUT_liNE非常适合在sql Plus或IDE中尝试和调试,但它在实际代码中没有位置,因为调用该过程的用户和应用程序永远不会看到它产生的输出.

@H_301_2@ 总结

以上是内存溢出为你收集整理的在oracle中执行过程期间检查错误全部内容,希望文章能够帮你解决在oracle中执行过程期间检查错误所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1165521.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-01
下一篇 2022-06-01

发表评论

登录后才能评论

评论列表(0条)

保存