有没有一种方法可以一般复制一行,特别是在不指定所有列的情况下。
在我的情况下,我有一个大表,我想在其中复制除 ID 和另一列之外的所有列。事实上,数据是在年初复制的。该表有 50 多列,因此如果我不必指定所有列,则更改架构会更加灵活和稳健。
这与以下问题密切相关:更新一个字段时复制行 https://stackoverflow.com/questions/3095998/oracle-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。
实现此目的的一个简单方法是使用匿名 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;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)