Oracle:在更新具有多列的表的一个字段时复制行

she*_*ira 3 sql oracle plsql

有没有办法一般复制一行,特别是不指定所有列。

在我的情况下,我有一个大表,我想在其中复制除 ID 和其他一列之外的所有列。事实上,数据是在年初逐年复制的。该表有 50 多列,因此如果我不必指定所有列,那么更改架构会更加灵活和健壮。

这与问题密切相关:在更新一个字段时复制行

在那个问题中,Kevin Cline 的评论基本上是在问我的问题,但实际上没有为这种更一般的情况提供解决方案。

编辑以根据要求提供更多详细信息,以下是所需内容的示例:

-- 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;
Run Code Online (Sandbox Code Playgroud)

在上表中复制行并将 pk 设置为 18,将 v2 设置为 10。

Fra*_*itt 6

一个简单的方法是使用匿名 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;
Run Code Online (Sandbox Code Playgroud)