Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Oracle中,有没有办法在连接错误的情况下通过DB链接重试插入?_Oracle_Oracle11g_Dblink - Fatal编程技术网

在Oracle中,有没有办法在连接错误的情况下通过DB链接重试插入?

在Oracle中,有没有办法在连接错误的情况下通过DB链接重试插入?,oracle,oracle11g,dblink,Oracle,Oracle11g,Dblink,由于连接错误,尝试使用DB link插入另一个Oracle数据库的DB过程无法执行该活动。有没有办法在Oracle中通过DB链接重试(比如重试3次)INSERT 错误文本: Error in INSERT in ITEM table.... ORA-03113: end-of-file on communication channel ORA-02063: preceding line from HRDBLINK 在项目表中插入时出错。。。。 ORA-03113:通信通道上的文件结束 ORA-

由于连接错误,尝试使用DB link插入另一个Oracle数据库的DB过程无法执行该活动。有没有办法在Oracle中通过DB链接重试(比如重试3次)INSERT

错误文本:

Error in INSERT in ITEM table.... ORA-03113: end-of-file on communication channel ORA-02063: preceding line from HRDBLINK 在项目表中插入时出错。。。。 ORA-03113:通信通道上的文件结束 ORA-02063:来自HRDBLINK的前一行 有没有办法重试(比如重试3次)插入

这可能是一种方式。在循环中运行
INSERT
,如果至少插入了一行,则跳过循环,否则重试3次。但要记住的一点是,如果没有插入行,则将运行insert 3次。如果是这样的话,您可以在运行insert之前进行检查来缓解这种情况

SET SERVEROUTPUT ON;
DECLARE
dblink_err EXCEPTION;
PRAGMA EXCEPTION_INIT(dblink_err, -3113);

BEGIN
    FOR i IN 1..3 LOOP
        BEGIN
            INSERT INTO tst@urdblink ( id ) VALUES ( 3 );
            EXIT WHEN SQL%rowcount > 0;
        EXCEPTION
            WHEN dblink_err THEN
                dbms_output.put_line(sqlcode || ' ERROR occured: Retrying');
        END;
    END LOOP;
END;
/
请检查我的答案,如果它对您有帮助,请接受,或者为给定的解决方案提供相关反馈(评论)。请阅读:了解为什么它很重要。