![](/img/trans.png)
[英]Check whether a list is sublist of another list in Oracle PL/SQL
[英]Oracle PL/SQL Check whether DB Link exists and works
我想拥有一个检查由名称字符串指定的数据库链接是否存在并起作用的函数。 我被困在编写异常,我不知道如何捕获错误代码。
create or replace function CHECK_DB_LINK(dbLink IN VARCHAR2) RETURN int IS
stmt VARCHAR2(99) ;
BEGIN
stmt := 'select 1 from dual@' || dbLink;
execute immediate stmt;
return 1;
EXCEPTION -- exception handlers begin
-- Only one of the WHEN blocks is executed.
WHEN 2019 THEN
dbms_output.put_line('Caught exception');
return 0;
END;
/
set serveroutput on;
DECLARE
c int;
BEGIN
c := CHECK_DB_LINK('X');
dbms_output.put_line('Connection '||'X'||' successful: ' || c);
END;
ORA-02019: connection description for remote database not found
ORA-06512: at "CONFIGURATION.CHECK_DB_LINK", line 5
ORA-06512: at line 4
您可以通过声明异常变量并将其链接到该错误代码来捕获特定错误。 例如:
create or replace function CHECK_DB_LINK(dbLink IN VARCHAR2) RETURN int IS
stmt VARCHAR2(99) ;
no_such_link EXCEPTION;
pragma exception_init(no_such_link, -2019);
BEGIN
stmt := 'select 1 from dual@' || dbLink;
execute immediate stmt;
return 1;
EXCEPTION
WHEN no_such_link THEN
dbms_output.put_line('Caught exception');
return 0;
END;
/
然后,您的匿名阻止将看到:
Caught exception
Connection X successful: 0
PL/SQL procedure successfully completed.
如果提出的任何其他错误,那么它不会被抓(因为它会使用with others
),并且调用者会看到该异常-并能够处理它或把它传递。
您可能希望函数显式捕获并处理其他错误(例如,如果链接存在但凭据错误),并且可以使用适当的编译指示为这些异常定义其他异常,以便when
阻塞并返回when
其捕获为自己的异常一个适当的值。
我找到了一种解决方法来捕获特定的异常,而我只捕获了所有其他异常:
create or replace function CHECK_DB_LINK(dbLink IN VARCHAR2) RETURN int IS
stmt VARCHAR2(99) ;
BEGIN
stmt := 'select 1 from dual@' || dbLink;
execute immediate stmt;
return 1;
EXCEPTION
WHEN OTHERS THEN
-- dbms_output.put_line('Caught exception');
return 0;
END;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.