Ответ 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));
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?
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));
Правильный способ вставить что-то (в Oracle) на основе другой уже существующей записи - это использовать MERGE.
Обратите внимание, что на этот вопрос уже был дан ответ на SO:
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
, вероятно, является лучшим (и более правильным) решением для вашей проблемы, поскольку оно специально предназначено для решения вашей задачи.