有没有办法一般地复制一行,特别是没有指定所有列。
在我的目标中,我有一个大表,我想复制除ID和另一列之外的所有列。事实上,数据是在年初复制的。该表有50多列,因此如果我不必指定所有列,它将更灵活,更灵活地更改模式。
这与问题密切相关:copy row while updating one field
在那个问题中,凯文克莱恩的评论基本上问了我的问题,但实际上没有为这个更一般的案例提供解决方案。
编辑以提供所需的更多详细信息,以下是所需内容的示例:
-- setup test table
create table my_table(pk, v1,v2,v3,v4 ... v50) as
select 17 pk, 1 v1,2 v2,3 v3... 50 v50 from dual;
在上表中复制行并将pk设置为18,将v2设置为10.
答案 0 :(得分:3)
一种简单的方法是匿名PL / SQL块和ROWTYPE
的使用:
-- setup test table
create table my_table(pk, value) as
select 17 pk, 'abc' value from dual;
declare
l_data my_table%rowtype;
begin
-- fetch the row we want to copy
select * into l_data from my_table tbl where tbl.pk = 17;
-- update all fields that need to change
l_data.pk := 18;
-- note the lack of parens around l_data in the next line
insert into my_table values l_data;
end;