gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 04:49:20 24 4
gpt4 key购买 nike

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,NewspaperID, StaffID, OrderDate, PublishDate,
Type, Status, 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);

如果这增加了任何值(value)。或者您可以只显示一般错误,然后将 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 中尝试和调试,但它在实际代码中没有位置,因为调用该过程的用户和应用程序永远不会看到它生成的输出。

关于oracle - 在oracle中检查过程执行期间的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2734400/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com