处理ORA-01403:找不到数据

时间:2019-03-07 19:44:32

标签: oracle plsql

我不希望处理任何数据。每当引发此异常时,我都希望程序继续运行,而不会因错误而停止。下面是代码段

BEGIN
  OPEN C_TABLE_PARTITON_LIST;
  LOOP
    FETCH C_TABLE_PARTITON_LIST INTO TABLE_PARTITION_LIST;
    EXIT WHEN C_TABLE_PARTITON_LIST%NOTFOUND;  
    SELECT COLUMN_NAME INTO PARTITION_COLUMN_NAME from ALL_PART_KEY_COLUMNS 
    sqlstring :='SELECT ( '|| PARTITION_COLUMN_NAME ||'from test';
    EXECUTE IMMEDIATE sqlstring INTO F_RESULT;  
    exception when no_data_found then
      dbms_output.put_line('no data found.');
      DBMS_OUTPUT.put_line( F_RESULT);

  END LOOP;
  CLOSE C_TABLE_PARTITON_LIST;
END;

当我添加Exception时,我的代码因以下错误而中断

  

PLS-00103:预期以下情况之一时遇到符号“ EXCEPTION”:
    (如果循环模式为null,则开始情况为goto声明结束出口      编译指示提高返回选择更新同时        <<      继续关闭当前删除取回锁定插入打开回滚      savepoint设置sql执行commit forall合并管道清除      json_exists json_value json_query json_object json_array
  ORA-06550:第29行,第3列:
  PLS-00103:预期以下情况之一时遇到符号“ CLOSE”:
     结束非编译最终覆盖的实例化静态      成员构造函数图

1 个答案:

答案 0 :(得分:2)

您必须将有问题的脚本部分包含在其自己的BEGIN-EXCEPTION-END块中,例如

BEGIN
  OPEN C_TABLE_PARTITON_LIST;
  LOOP
    FETCH C_TABLE_PARTITON_LIST INTO TABLE_PARTITION_LIST;
    EXIT WHEN C_TABLE_PARTITON_LIST%NOTFOUND;  

    begin     --> you need this ...

      SELECT COLUMN_NAME INTO PARTITION_COLUMN_NAME from ALL_PART_KEY_COLUMNS 
      sqlstring :='SELECT ( '|| PARTITION_COLUMN_NAME ||'from test';
      EXECUTE IMMEDIATE sqlstring INTO F_RESULT;  
    exception when no_data_found then
      dbms_output.put_line('no data found.');
      DBMS_OUTPUT.put_line( F_RESULT);

    end;      --> ... and this

  END LOOP;
  CLOSE C_TABLE_PARTITON_LIST;
END;

请注意,我只是演示了执行此操作的方法。您发布的代码

  • 不完整(缺少DECLARE部分)
  • 无效(SELECT语句缺少分号,并且可能还有WHERE子句
  • SQLSTRING变量将不起作用; 'from test'的前导空格,否则该语句将无效
  • 我建议您先DBMS_OUTPUT SQLSTRING以确保其正确;然后执行它。