【问题标题】:Execute Immediate to Add a Column and Insert Data in this New Column执行立即添加一列并在此新列中插入数据
【发布时间】:2019-02-17 12:16:46
【问题描述】:

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

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

您知道导致此问题的原因吗?

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

【问题讨论】:

  • 您是否也使用动态 sql 插入?如果您可以分享一些示例代码,那将有所帮助。

标签: sql oracle dynamic plsql insert


【解决方案1】:

如果您使用动态 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;

【讨论】:

  • 这很好。非常感谢。
  • 您好 Jaydip Rakholiya,您所说的 SQL 在执行前经过验证是什么意思?请给我更多的细节。
猜你喜欢
  • 1970-01-01
  • 2014-01-19
  • 2013-09-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多