INSERT之前的更新(Oracle)

时间:2009-10-27 18:18:00

标签: sql oracle

我有两个模式S1和S2具有相同的表结构。我将从示例开始:

在S1.table1上我有:

    ID   DATA1       DATA2
   ---- ---------- ---------- 
    01   data1       test1
    02   data1       test1

在S2.table1上我有:

     ID   DATA1       DATA2
   ---- ---------- ---------- 
    01   data2       test2
    02   data2       test2

是否可以选择一行(来自S1.table1)更新它(更改ID列的值)并将其插入到S2.table1?我想编写单个SQL查询,这将是用作准备语句(Java)。

S2的最终结果应为:

     ID   DATA1       DATA2
   ---- ---------- ---------- 
    01   data2       test2
    02   data2       test2
    03   data1       test1

所以我从S1.table1插入了第一行,并且只更改了ID。

谢谢, 纳斯

4 个答案:

答案 0 :(得分:2)

怎么样

INSERT INTO S2
SELECT 03, DATA1, DATA2 FROM S1 WHERE ID=01

也就是说,您只需选择所需的数据,但明确指出任何替换数据。

答案 1 :(得分:1)

INSERT INTO S2 (Data1, Data2) SELECT Data1, Data2 FROM S1 WHERE ID=xxx

假设S2中的ID是自动递增(例如通过序列和触发器)。

答案 2 :(得分:1)

您必须使用序列:

insert into s2.table1
select seq.next_val, data1, data2
from s1.table1

序列总是会计数。因此,当您再次运行时,新行将“附加”到现有行。

答案 3 :(得分:0)

insert into s2.table1 (
  select id+1, data1, data2 
  from s1.table1 
  where id=(select max(id) from s1.table1)
);