Подтвердить что ты не робот

Oracle вставить, если не существует оператора

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?

4b9b3361

Ответ 1

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));

Ответ 3

insert into OPT       (email,        campaign_id) 
select '[email protected]' as email, 100 as campaign_id from dual MINUS
select                 email,        campaign_id from OPT;

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

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