ОБНОВЛЕНИЕ до ВСТАВКИ (Oracle) - PullRequest
1 голос
/ 27 октября 2009

У меня есть две схемы 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.

Спасибо, Jonas

Ответы [ 4 ]

2 голосов
/ 27 октября 2009

Как насчет

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

То есть вы просто выбираете нужные данные, но явно указываете данные для замены.

1 голос
/ 27 октября 2009

Вы должны использовать последовательность:

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

Последовательность всегда будет отсчитываться. Поэтому при повторном запуске новые строки будут «добавлены» к существующим.

1 голос
/ 27 октября 2009
INSERT INTO S2 (Data1, Data2) SELECT Data1, Data2 FROM S1 WHERE ID=xxx

Предполагается, что идентификатор в S2 автоматически инкремментируется (например, через последовательность и триггер).

0 голосов
/ 18 сентября 2013
insert into s2.table1 (
  select id+1, data1, data2 
  from s1.table1 
  where id=(select max(id) from s1.table1)
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...