立即执行以添加列并在此新列中插入数据

时间:2018-09-12 19:35:42

标签: sql oracle dynamic plsql insert

我必须创建一个plsql块,它将在表上添加一个新列(使用动态Sql),然后它将一些数据插入到该新添加的列中。

执行块时,出现一条消息,提示未定义我的列,即使该列已添加在insert语句之前。

您是否知道可能导致此问题的原因?

就像我的插入语句不知道新列已添加一样。

1 个答案:

答案 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;