gpt4 book ai didi

database - 当过程 #2 失败并引发错误时,如何阻止过程 #1 显示成功消息?

转载 作者:搜寻专家 更新时间:2023-10-30 23:25:56 25 4
gpt4 key购买 nike

我有调用过程 #2 的过程 #1。当过程 #2 引发错误时,它会成功显示有关错误的消息。但是,过程 #1 仍然显示客户已成功添加到数据库中的消息。我怎样才能阻止这种情况发生?

CREATE OR REPLACE PROCEDURE ADD_CUST_TO_DB (pcustid number, pcustname varchar2) AS
err_range EXCEPTION;
BEGIN
if pcustid < 1 OR pcustid > 499 THEN
RAISE err_range;
ELSE
INSERT INTO CUSTOMER (CUSTID, CUSTNAME, SALES_YTD, STATUS) VALUES (pcustid, pcustname, 0, 'OK');
END IF;
EXCEPTION
WHEN DUP_VAL_ON_INDEX THEN
dbms_output.put_line('ORA-20001:ERROR:DUPLICATE CUSTOMER ID');
WHEN err_range THEN
dbms_output.put_line('ORA-20002:ERROR:CUSTOMER ID OUT OF RANGE');
WHEN OTHERS THEN
dbms_output.put_line(SQLERRM);
dbms_output.put_line(SQLCODE);
END;

CREATE OR REPLACE PROCEDURE ADD_CUSTOMER_VIASQLDEV (pcustid number, pcustname varchar2) IS
BEGIN
dbms_output.put_line('----------------------');
dbms_output.put_line('Adding customer. ' || 'ID: ' || pcustid || ' Name: ' || pcustname);
ADD_CUST_TO_DB(pcustid, pcustname);
dbms_output.put_line('Customer Added OK');
commit;
EXCEPTION
WHEN OTHERS THEN
dbms_output.put_line(SQLERRM);
END;

Actual result: Adding customer. ID: 595 Name: Jeff Jeff ORA-20002:ERROR:CUSTOMER ID OUT OF RANGE Customer Added OK

Expected result: Adding customer. ID: 595 Name: Jeff Jeff ORA-20002:ERROR:CUSTOMER ID OUT OF RANGE

最佳答案

您在 ADD_CUST_TO_DB 中的异常得到了正确处理,过程 ADD_CUSTOMER_VIASQLDEV 甚至不知道它。

您应该从 ADD_CUST_TO_DB 过程的 EXCEPTION block 中引发错误,该过程将由 ADD_CUSTOMER_VIASQLDEV 处理,或者您甚至可以设置一个OUT 参数以了解 ADD_CUSTOMER_VIASQLDEV 中的确切错误。

类似下面的内容将为您完成任务。 (从 ADD_CUST_TO_DB 中抛出异常)

CREATE OR REPLACE PROCEDURE ADD_CUST_TO_DB (pcustid number, pcustname varchar2) AS
err_range EXCEPTION;
BEGIN
if pcustid < 1 OR pcustid > 499 THEN
RAISE err_range;
ELSE
INSERT INTO CUSTOMER (CUSTID, CUSTNAME, SALES_YTD, STATUS) VALUES (pcustid, pcustname, 0, 'OK');
END IF;
EXCEPTION
WHEN DUP_VAL_ON_INDEX THEN
dbms_output.put_line('ORA-20001:ERROR:DUPLICATE CUSTOMER ID');
RAISE; --add this
WHEN err_range THEN
dbms_output.put_line('ORA-20002:ERROR:CUSTOMER ID OUT OF RANGE');
RAISE; --add this
WHEN OTHERS THEN
dbms_output.put_line(SQLERRM);
dbms_output.put_line(SQLCODE);
RAISE; --add this
END;
/

干杯!

关于database - 当过程 #2 失败并引发错误时,如何阻止过程 #1 显示成功消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57906337/

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