我必须创建一个plsql块,它将在表上添加一个新列(使用动态Sql),然后它将一些数据插入到该新添加的列中。
执行块时,出现一条消息,提示未定义我的列,即使该列已添加在insert语句之前。
您是否知道可能导致此问题的原因?
就像我的插入语句不知道新列已添加一样。
答案 0 :(得分:3)
如果您添加新列并使用动态SQL在新列中更新/插入数据,则它将起作用。 示例-
begin
execute immediate 'ALTER TABLE table_name ADD column_name column-definition';
execute immediate 'update table_name set column_name =''sample-data''';
COMMIT ;
end;
但是,如果使用动态SQL添加新列并使用静态SQL更新/插入,则会抛出错误消息。
原因-静态SQL在执行前已通过验证。
示例-
begin
execute immediate 'ALTER TABLE table_name ADD column_name column-definition';
update table_name set column_name ='sample-data';
COMMIT ;
end;