0
我来到有趣的错误,我不知道如何解决它的最佳方式。给出以下块:PLSQL忽略编译错误,这不是错误
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:循环变量 '项' 使用无效
任何想法如何摆脱这个错误?数据库中不存在列NODES.CONNECTIONDESCRIPTION
时会出现问题,但在这种情况下for循环不会在运行时执行。我需要禁用这些错误,但还没有找到任何方法来做到这一点。我曾尝试使用ALTER SESSION SET PLSQL_WARNINGS='DISABLE:00904'
,但它没有效果。
由于
动态查询?你已经有一个立即执行,为什么不添加另一个。或条件编译,如果在你的情况下可能的话 – micklesh
而不是禁用错误,为什么你不确定列实际上在表中,或者你有明确的SELECT授予该表? – ruudvan
@micklesh谢谢你的回复,我已经找到了一个和你的建议一样的方法。另一个动态查询批量收集到一个数组,然后循环通过数组 –