设为首页 - 加入收藏 PHP编程网 - PHP站长网 (http://www.52php.cn)- 电商,百科,编程,业界,移动互联,5G,云计算,站长网!
热搜: 娱乐 站长之家 服务 百度
当前位置: 首页 > 站长百科 > 正文

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

发布时间:2021-01-24 10:24 所属栏目:[站长百科] 来源:网络整理
导读: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(C

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中尝试和调试,但它在实际代码中没有位置,因为调用该过程的用户和应用程序永远不会看到它产生的输出.

【免责声明】本站内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。

推荐文章
热点阅读