gpt4 book ai didi

oracle - oracle 在哪里存储用户定义的异常?

转载 作者:行者123 更新时间:2023-12-04 18:11:27 30 4
gpt4 key购买 nike

是否有存储用户自定义异常的oracle表?

最佳答案

没有。

与其他变量一样,用户定义的异常在 PL/SQL block 中定义,并且具有 PL/SQL 变量将具有的任何范围。所以,例如

DECLARE
my_exception EXCEPTION;
BEGIN
RAISE my_exception;
EXCEPTION
WHEN my_exception
THEN
dbms_output.put_line( 'Caught my_exception' );
END;

将创建用户定义的异常 my_exception 但该异常将只存在于匿名 PL/SQL block 的范围内。您可以在包中定义异常,以便它们可以被多个 PL/SQL block 引用。并且您可以使用 exception_init pragma 将用户定义的异常与特定错误代码相关联

SQL> ed
Wrote file afiedt.buf

1 DECLARE
2 my_exception EXCEPTION;
3 pragma exception_init( my_exception, -20001 );
4 BEGIN
5 RAISE my_exception;
6* END;
SQL> /
DECLARE
*
ERROR at line 1:
ORA-20001:
ORA-06512: at line 5

或者您可以单独使用 raise_application_error 函数或与用户定义的异常变量一起使用

SQL> ed
Wrote file afiedt.buf

1 DECLARE
2 my_exception EXCEPTION;
3 pragma exception_init( my_exception, -20001 );
4 BEGIN
5 RAISE_APPLICATION_ERROR( -20001, 'This is my error text' );
6 EXCEPTION
7 WHEN my_exception
8 THEN
9 dbms_output.put_line( 'Caught my_exception' );
10 dbms_output.put_line( sqlerrm );
11* END;
SQL> /
Caught my_exception
ORA-20001: This is my error text

PL/SQL procedure successfully completed.

没有数据字典表来存储用户定义的异常,因为您的代码可能定义这些异常的方式太多(可能存在冲突)。从良好的异常管理角度来看,您通常会想出一种一致的方法来定义特定于应用程序的异常并坚持使用该方法。就个人而言,我喜欢一个包,它定义了我所有的异常并将它们与错误代码相关联

SQL> ed
Wrote file afiedt.buf

1 create or replace package error_pkg
2 as
3 invalid_name exception;
4 pragma exception_init( invalid_name, -20001 );
5 invalid_address exception;
6 pragma exception_init( invalid_address, -20002 );
7* end;
SQL> /

Package created.

假设我所有的用户定义的异常都是这样定义的,我可以去包定义中找到我所有的定义。

关于oracle - oracle 在哪里存储用户定义的异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12564759/

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