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

Mar*_*rio 1 sql oracle plsql insert dynamic

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

当我执行块时,我收到一条消息,指出我的列未定义,即使它已在插入语句之前添加。

您知道什么可能导致此问题吗?

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

Jay*_*iya 5

如果您添加新列并使用动态 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;
Run Code Online (Sandbox Code Playgroud)

但是,如果您使用动态 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;
Run Code Online (Sandbox Code Playgroud)