목표는 삽입하기 전에 열의 기존 값을 확인하여 중복 데이터를 삽입하지 못하게하는 것입니다. 이것은 MS SQL에서 'IF NOT EXISTS() ...'를 사용하는 것과 같은 결과입니다.중복 값 방지 오라클의 INSERT
Oracle 11g에서는이를 수행 할 수 없습니다. 필자는 Oracle PLSQL이 이와 동일한 내용을 제공하지 않는다는 것을 이해합니다. 내 이해를 바로 잡으십시오.
제 연구에서 '병합'이이 목표를 달성하는 방법임을 알게되었습니다.
내 PLSQL은 아래에 있지만 작동하지 않습니다. "0 rows merge"의 쿼리 결과
EMP 테이블에는 아래 표에 표시된 IDENTITY COLUMN ID가 있습니다.
MERGE INTO EMP E
USING
(SELECT ID, EMAIL FROM EMP WHERE EMAIL = '[email protected]') T
ON (E.EMAIL = T.EMAIL)
WHEN NOT MATCHED THEN
INSERT
(
F_NAME
, L_NAME
, EMAIL
)
VALUES
(
'Employee'
, 'Test'
, '[email protected]'
);
COMMIT;
EMP를 테이블의 표현
아래"EMP" TABLE
ID F_NAME L_NAME EMAIL
------- ------------ ------------ ------------
1 John Smith [email protected]
NOT은 다음과 같습니다 존재하는 경우 사용에서 내 시도이다. 두 시저 및 쿼리는 MS SQL에서 잘 작동하지만, 오라클 11g에서 IF 문 다음 구문 오류를 생성합니다
CREATE OR REPLACE PROCEDURE "SPADDUPDATEEMP"
(
P_FNAME IN EMP.F_NAME%TYPE
, P_LNAME IN EMP.L_NAME%TYPE
, P_EMAIL IN EMP.EMAIL%TYPE
)
AS
IF NOT EXISTS (SELECT * FROM EMP WHERE EMAIL = P_EMAIL)
BEGIN
INSERT INTO EMP
(
F_NAME
, L_NAME
, EMAIL
)
VALUES
(
P_FNAME
, P_LNAME
, P_EMAIL
)
END;
COMMIT;
당신은'EMP를 병합하려고 :
Source
–Oracle과 SQL Server는 실제로 이런 종류의 쿼리와 거의 동일한 구문과 함수를 가지고 있습니다. 오라클의 SQL Server에서 사용한 것과 동일한 쿼리를 사용하면됩니다. 그래도 문제가 해결되지 않으면 쿼리와 오류를 표시하십시오. 대개 매우 사소한 변경으로 해결할 수 있습니다. – RBarryYoung
@JuanCarlosOropeza 더 잘 이해하기 위해 MERGE 진술을 자세히 조사 할 것입니다. 목적은 이메일 주소가 일치하지 않을 때 병합하는 것이 었습니다. – CodeLocked