在oracle中执行过程期间检查错误
发布时间:2020-12-12 12:55:25 所属栏目:百科 来源:网络整理
导读: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(Cus
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中尝试和调试,但它在实际代码中没有位置,因为调用该过程的用户和应用程序永远不会看到它产生的输出. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |