Вопрос по – Оператор Oracle, если не существует

27
insert into OPT (email, campaign_id) values('[email protected]',100)
where not exists( select * from OPT where (email ="[email protected]" and campaign_id =100)) ;

Отчет об ошибке: Ошибка SQL: ORA-00933: Команда SQL не была правильно завершена 00933. 00000 - «Команда SQL не была правильно завершена» * Причина:
* Действие:

как вставить новую строку, если ее нет в Oracle?

Ваш Ответ

4   ответа
51
insert into OPT (email, campaign_id) 
select '[email protected],',100
from dual
where not exists(select * 
                 from OPT 
                 where (email ="[email protected]" and campaign_id =100));
Простой и умный для массовой вставки. Благодарност Farid
12

й записи - это использовать MERGE заявление

Обратите внимание, что на этот вопрос уже был дан ответ на SO:

вставка оракула, если строка не существует вставь если не существует оракул
6
insert into OPT       (email,        campaign_id) 
select '[email protected]' as email, 100 as campaign_id from dual MINUS
select                 email,        campaign_id from OPT;

[email protected]/100 в ОПТ,MINUS вычтет эту запись изselect '[email protected]' as email, 100 as campaign_id from dual запись и ничего не будет вставлено. С другой стороны, если такой записи нет, тоMINUS ничего не вычитает и значения[email protected]/100 будет вставлен.

Как P.marino уже указал,merge, вероятно, является лучшим (и более правильным) решением вашей проблемы, поскольку оно специально разработано для решения вашей задачи.

0
MERGE INTO OPT
USING
    (SELECT 1 "one" FROM dual) 
ON
    (OPT.email= '[email protected]' and OPT.campaign_id= 100) 
WHEN NOT matched THEN
INSERT (email, campaign_id)
VALUES ('[email protected]',100) 
;
Из обзора: Привет, пожалуйста, не отвечайте только с исходным кодом. Попробуйте дать хорошее описание того, как работает ваше решение. Видеть: Как мне написать хороший ответ?. Благодарност sɐunıɔןɐqɐp

Похожие вопросы