2013-06-23 5 views
1

중복 된 키 줄에 대해 "ORA-00933 : SQL 명령이 제대로 종료되지 않았습니다."라는 오류 메시지가 나타나는이 코드로 문제를 격리했습니다. .SQL 명령이 올바르게 삽입되지 않았거나 중복 된 경우

중복 키가없는 한 행을 삽입하려고하는데,이 경우 행을 대신 업데이트하려고합니다. insert...selecton duplicate key update과 같은 것입니다.

구문 상 문제가 있음을 알 수 있지만 일반적으로 SQL로 작업하지 않으므로 도움을 얻을 수 있습니다.

insert into "tableB" ("col1", "col2") 
select  "tableA"."colX", "tableA"."colY" 
from  "tableA" 
on duplicate key update "tableB"."col1" = "tableA"."colX"; 

답변

2

내가 MERGE을 사용으로 보일 것이다

MERGE INTO tableB b 
USING tableA a 
    ON (b.col1 = a.colX) 
WHEN  MATCHED THEN UPDATE SET b.col2 = a.colY 
WHEN NOT MATCHED THEN INSERT(col1, col2) 
VALUES(a.colX, a.colY); 
:이 두 테이블 사이에 키를 추정되어 COL1과 colx입니다.

+0

MERGE와 INSERT ... SELECT의 차이점은 무엇입니까? 즉, 변경하기 전에 내가 알아야 할 것이 있습니까? – stringy

+0

추가 수정 : 편집을했기 때문에 작동했습니다. – stringy

+0

@stringy - 오라클에는 '중복 키'구문이 없기 때문에 대부분 다릅니다. –