如何删除 table,然后通过 SELECT * 加上一个附加列在 PLSQL 中插入
How to DELETE a table, then INSERT in PLSQL by SELECT * plus an additional column
我想删除 table 的内容,用一个非常冗长的查询中的内容填充它,并添加另一列数据。
我的查询和 table 使用相同的字段名称,但 table 有一个名为 LAST_UPDATED 的附加列。此列需要为每一行更新为 SYSDATE。
到目前为止,我的代码如下所示:
BEGIN
delete from TABLE;
insert into TABLE
SELECT * from
(Here there is about a thousand lines of code, nested selects, joins, etc);
commit;
END;
所以当我现在 运行 它时,我得到一个错误,没有足够的值。如何将 LAST_UPDATED 列的值显式设置为 SYSDATE?
(我已经在 TOAD 中将查询作为脚本单独测试(没有删除和插入)并且它 returns 脚本输出所需的值(减去 LAST_UPDATED 列) ).
如果此过程用于临时的非生产清除+重新加载,并且查询没有 return last_updated 列,那么您可以这样做:
BEGIN
delete from TABLE;
insert into TABLE
SELECT x.*, sysdate last_updated from
(Here there is about a thousand lines of code, nested selects, joins, etc) x;
commit;
END;
/
但是,这是非常危险的,因为如果您查询的列与 table 的列不匹配(或者如果有人在您不知情的情况下向您的 table 添加了一个列) ,您可能 运行 遇到问题。
更好的方法是明确说明列的名称 - 特别是如果这将在生产中 运行ning - 就像这样:
BEGIN
delete from TABLE;
insert into TABLE (col1, col2, col3, ... , last_updated)
SELECT col1,
col2,
col3,
...,
sysdate last_updated
from
(Here there is about a thousand lines of code, nested selects, joins, etc) x;
commit;
END;
/
这样,您就不太可能 运行 由于重新排序 table 列等而出现任何错误。
我想删除 table 的内容,用一个非常冗长的查询中的内容填充它,并添加另一列数据。
我的查询和 table 使用相同的字段名称,但 table 有一个名为 LAST_UPDATED 的附加列。此列需要为每一行更新为 SYSDATE。
到目前为止,我的代码如下所示:
BEGIN
delete from TABLE;
insert into TABLE
SELECT * from
(Here there is about a thousand lines of code, nested selects, joins, etc);
commit;
END;
所以当我现在 运行 它时,我得到一个错误,没有足够的值。如何将 LAST_UPDATED 列的值显式设置为 SYSDATE?
(我已经在 TOAD 中将查询作为脚本单独测试(没有删除和插入)并且它 returns 脚本输出所需的值(减去 LAST_UPDATED 列) ).
如果此过程用于临时的非生产清除+重新加载,并且查询没有 return last_updated 列,那么您可以这样做:
BEGIN
delete from TABLE;
insert into TABLE
SELECT x.*, sysdate last_updated from
(Here there is about a thousand lines of code, nested selects, joins, etc) x;
commit;
END;
/
但是,这是非常危险的,因为如果您查询的列与 table 的列不匹配(或者如果有人在您不知情的情况下向您的 table 添加了一个列) ,您可能 运行 遇到问题。
更好的方法是明确说明列的名称 - 特别是如果这将在生产中 运行ning - 就像这样:
BEGIN
delete from TABLE;
insert into TABLE (col1, col2, col3, ... , last_updated)
SELECT col1,
col2,
col3,
...,
sysdate last_updated
from
(Here there is about a thousand lines of code, nested selects, joins, etc) x;
commit;
END;
/
这样,您就不太可能 运行 由于重新排序 table 列等而出现任何错误。