sql - PL/SQL 处理多个 notfound exptions +constraint violations

标签 sql database oracle plsql

我有一个 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/

相关文章:

mysql - 如何通过一条查询语句从两个相关表中获取矩阵表?

database - 数据框到数据库表

oracle - 插入时可以在表上创建索引

java - 我收到错误 "Invalid column name"

java - 删除行和删除表锁oracle

SQL Sum of last X Sum of records

mysql - 如何在 MySQL 中进行插值

使用 PhoneGap 的 Javascript 数据存储解决方案

mysql - SQL 语句错误

mysql - 如何获取表中连续记录之间的天数?