我有一个 pl/sql 相关的问题。 假设我有一个相当长的过程,其中包含一些插入、选择和所有内容。
有没有一种方法可以让我在其中一个选择出现错误时准确地知道是哪一个?
假设我有
PROCEDURE processRequests IS
P_ID numer;
P_NAME varchar2(20);
BEGIN
SELECT NAME into P_NAME FROM users WHERE ID=P_ID;
SELECT NAME into P_NAME FROM users WHERE ID2=P_ID;
INSERT INTO users (ID,ID2,NAME)values(1,2,'Joe');
END;
我想知道第一个和第二个选择何时返回错误并在错误日志表中更新它,还有一些如果有外键、主键等约束,我希望能够捕获这些错误.
我试过使用 not_found 异常,但我不知道错误在哪里。
有什么建议吗?
最好的问候 史蒂文·詹姆斯
最佳答案
要补充 mkuligowski 的答案,如果您有一个很长的 block 并且您总是想在异常发生后退出,那么轻量级的替代方法是使用节标记来找出异常发生的位置。
PROCEDURE processRequests IS
P_ID numer;
P_NAME varchar2(20);
P_SECTION varchar2(30);
BEGIN
P_SECTION := 'first select';
SELECT NAME into P_NAME FROM users WHERE ID=P_ID;
P_SECTION := 'second select';
SELECT NAME into P_NAME FROM users WHERE ID2=P_ID;
P_SECTION := 'first insert';
INSERT INTO users (ID,ID2,NAME)values(1,2,'Joe');
EXCEPTION WHEN OTHERS THEN
dbms_output.put_line('Error in section: ' || p_section);
dbms_output.put_line(dbms_utility.format_error_backtrace);
raise;
END;
关于sql - PL/SQL 处理多个 notfound exptions +constraint violations,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49941976/