oracle - Oracle异常处理-这正确吗?

标签 oracle error-handling plsql oracle10g oracle11g

我有以下...

IF CONDITION1  THEN

        -- SELECT  STATEMENT MIGHT RETURN DATA

         IF CONDITION2 THEN

                -- SELECT COUNT

             IF CONDITION3 THEN



                    INSERT INTO TABLE
                            (
                            --- 
                            )
                    VALUES  (
                            ---
                            );


            End IF;


    END IF;


 END IF;


EXCEPTION
   WHEN NO_DATA_FOUND THEN
 RETURN;

END of Trigger

这是处理CONDITION1中select语句异常的正确方法吗?

最佳答案

PL/SQL无法返回错误的位置,因此您需要在要忽略特定错误的部分周围创建一个块:

IF CONDITION1  THEN
         BEGIN
         -- SELECT  STATEMENT MIGHT RETURN DATA
         EXCEPTION
             WHEN NO_DATA_FOUND THEN
                 NULL;
         END;
         IF CONDITION2 THEN
                -- SELECT COUNT
             IF CONDITION3 THEN
                    INSERT INTO TABLE
                            (
                            --- 
                            )
                    VALUES  (
                            ---
                            );
            End IF;
    END IF;
 END IF;
END TRIGGER_NAME;

另一种选择是使用显式游标,当它为空时不返回错误:
DECLARE
   CURSOR cur_sample is select dummy from dual where 1=0;
   v_dummy dual.dummy%type;
BEGIN
   IF CONDITION1  THEN
         open cur_sample;
         fetch cur_sample into v_dummy;
         close cur_sample;
         IF CONDITION2 THEN
                -- SELECT COUNT
             IF CONDITION3 THEN
                    INSERT INTO TABLE
                            (
                            --- 
                            )
                    VALUES  (
                            ---
                            );
            End IF;
       END IF;
    END IF;
END;

关于oracle - Oracle异常处理-这正确吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8081566/

相关文章:

oracle - 如何使用 oracle 创建一个带有小字符的表?

xml - 如何使用 XMLTABLE 在 Oracle SQL 中导入复杂的 XML 类型

c# - 是否无法在运行时或编译时更改 SSDL 内容(Visual Studio 2015 EntityFramework 数据库首先使用 Oracle)

c# - 如何知道在C#代码中具有TRY CATCH处理的存储过程中是否存在错误

oracle - PL/SQL PLS-00103 关于添加两个变量

python - 无法在 docker 镜像中导入 cx_Oracle

php - 将PHP error_log文件保留在Web根目录之外

python - TypeError : __init__() got an unexpected keyword argument 'checksec'

.net - 甲骨文11g : ORA-22284 on insertion into table with CLOB field > ~1350 chars

sql - 如何在 oracle 中创建 "singleton"计划作业?