PLSQL忽略编译错误,这不是错误

时间:2016-05-24 12:27:20

标签: oracle for-loop plsql compiler-warnings

我遇到了一个有趣的错误,我不确定如何解决它的最佳方法。给出以下块:

    DECLARE
      v_column_exists number := 0;  
      host_column_exists number := 0;
      i number;
    BEGIN
      Select count(*) into v_column_exists from user_tab_cols where column_name = 'CONNECTIONDESCRIPTION' and table_name = 'NODES';

      if (v_column_exists = 1) then
        Select count(*) into host_column_exists from user_tab_cols where column_name = 'HOST' and table_name = 'NODES';

        if (host_column_exists = 0) then
          execute immediate 'alter table NODES add (Host varchar2(255))';
          for item in (select connectiondescription, code from nodes) loop
            ... LOOP STUFF ...
          end loop;
        end if;
      end if;
    END;

我得到以下结果:

  

PL / SQL:ORA-00904:“CONNECTIONDESCRIPTION”:无效的标识符
  ORA-06550:第40行,第20列:PL / SQL:忽略SQL语句
  ORA-06550:第41行,第20列:PLS-00364:循环索引变量'ITEM'   使用无效

任何想法如何摆脱这个错误?当数据库中不存在列NODES.CONNECTIONDESCRIPTION时出现问题,但是在这种情况下,循环不会在运行时执行。我需要禁用这些错误,但没有找到任何方法来做到这一点。我尝试过使用ALTER SESSION SET PLSQL_WARNINGS='DISABLE:00904',但没有效果。

由于

1 个答案:

答案 0 :(得分:0)

正确的方法是使用另一个动态查询,该查询将项目批量收集到数组,然后循环遍历此数组。