반응형
Oracle insert(존재하지 않는 경우) 문
insert into OPT (email, campaign_id) values('mom@cox.net',100)
where not exists( select * from OPT where (email ="mom@cox.net" and campaign_id =100)) ;
오류 보고서: SQL 오류: ORA-00933:SQL 명령이 00933을 제대로 종료하지 않았습니다.00000 - "SQL 명령이 제대로 종료되지 않았습니다" *원인:
*액션:
Oracle에 없는 경우 새 행을 삽입하려면 어떻게 해야 합니까?
insert into OPT (email, campaign_id)
select 'mom@cox.net',100
from dual
where not exists(select *
from OPT
where (email ='mom@cox.net' and campaign_id =100));
이미 존재하는 다른 레코드를 기반으로 Oracle에 무언가를 삽입하는 올바른 방법은 MERGE 문을 사용하는 것입니다.
이 질문은 이미 SO에 대한 답변이 있습니다.
MERGE INTO OPT
USING
(SELECT 1 "one" FROM dual)
ON
(OPT.email= 'mom@cox.net' and OPT.campaign_id= 100)
WHEN NOT matched THEN
INSERT (email, campaign_id)
VALUES ('mom@cox.net',100)
;
insert into OPT (email, campaign_id)
select 'mom@coxnet' as email, 100 as campaign_id from dual MINUS
select email, campaign_id from OPT;
이미 이력이 있는 경우mom@cox.net
/100
OPT에서는MINUS
에서 이 레코드를 뺍니다.select 'mom@coxnet' as email, 100 as campaign_id from dual
아무것도 삽입되지 않습니다.한편, 그러한 기록이 없는 경우,MINUS
어떤 것도, 그리고 가치관을 굴복시키지 않는다.mom@coxnet
/100
삽입됩니다.
p.marino가 이미 지적했듯이merge
님은 작업 해결을 위해 특별히 설계되어 있기 때문에 문제에 대한 보다 나은(더 정확한) 솔루션이 될 수 있습니다.
또 다른 접근법은 다음과 같은 기능을 활용하는 것입니다.INSERT ALL
oracle의 구문,
INSERT ALL
INTO table1(email, campaign_id) VALUES (email, campaign_id)
WITH source_data AS
(SELECT 'mom@cox.net' email,100 campaign_id
FROM dual
UNION ALL
SELECT 'dad@cox.com' email,200 campaign_id
FROM dual)
SELECT email
,campaign_id
FROM source_data src
WHERE NOT EXISTS (SELECT 1
FROM table1 dest
WHERE src.email = dest.email
AND src.campaign_id = dest.campaign_id);
INSERT ALL
또한 소스로서 하위 쿼리를 기반으로 여러 테이블에 조건부 삽입을 수행할 수 있습니다.
참고할 만한 아주 깨끗하고 좋은 예가 몇 가지 있습니다.
언급URL : https://stackoverflow.com/questions/10824764/oracle-insert-if-not-exists-statement
반응형
'it-source' 카테고리의 다른 글
Spring Security OAuth2와 Spring Social 통합 (0) | 2023.02.18 |
---|---|
쇼트 코드 출력 추가쇼트 코드 출력 추가새 줄 뒤에새 줄 뒤에 (0) | 2023.02.16 |
'formGroup'은 'form'의 알려진 속성이 아니므로 바인딩할 수 없습니다. (0) | 2023.02.16 |
각도 구성 요소: 템플릿 바꾸기 옵션이 없습니까? (0) | 2023.02.16 |
다운로드 기능이 asp.net 업데이트 패널 내에서 작동하지 않음 (0) | 2023.02.16 |