Команда SQL не завершена должным образом, при вставке/дубликате

Я изолировал свою проблему до этого кода, который выдает мне сообщение об ошибке «ORA-00933: команда SQL неправильно завершена» для дублирующей ключевой строки.

Я пытаюсь вставить строки, если у них нет дублирующегося ключа, и в этом случае я хочу вместо этого обновить их. Что-то вроде insert...select и об обновлении двойного ключа.

Я вижу, что это должна быть проблема синтаксиса, но я обычно не работаю с SQL, поэтому любая помощь приветствуется.

insert into "tableB" ("col1", "col2")
select      "tableA"."colX", "tableA"."colY"
from        "tableA"
on duplicate key update "tableB"."col1" = "tableA"."colX";

person stringy    schedule 23.06.2013    source источник


Ответы (1)


Я бы посмотрел на использование MERGE:

MERGE INTO tableB b
USING tableA a
    ON (b.col1 = a.colX)
WHEN     MATCHED THEN UPDATE SET b.col2 = a.colY
WHEN NOT MATCHED THEN INSERT( col1, col2 )
VALUES(a.colX, a.colY);

Примечание. Предполагается, что ваш ключ между двумя таблицами — col1 и colx.

person sgeddes    schedule 23.06.2013
comment
Чем MERGE отличается от INSERT...SELECT? есть ли что-то, о чем я должен знать, прежде чем вносить изменения? - person stringy; 23.06.2013
comment
Отредактировано, чтобы добавить: потому что я внес изменения, и они работают :) - person stringy; 23.06.2013
comment
@stringy - это в основном другое, потому что в Oracle нет синтаксиса on duplicate key. - person Alex Poole; 23.06.2013