복붙노트

[SQL] 오라클 : ON DUPLICATE KEY UPDATE [중복]

SQL

오라클 : ON DUPLICATE KEY UPDATE [중복]

나는 하나 (바람직하게는 단순-에서-A-구문 감지) 쿼리 여러 레코드를 업데이트하는 내가 미키 엘 드 마레부터 여기 솔루션을 구현하기 위해 노력하고있어. 나는 이런 모습에서 배우려고 노력하고 있다는 예제 코드 :

INSERT INTO table (id,Col1,Col2) VALUES (1,1,1),(2,2,3),(3,9,3),(4,10,12) ON DUPLICATE KEY UPDATE Col1=VALUES(Col1),Col2=VALUES(Col2);

나는 오라클을 사용하고 있습니다 (아직 잘 SQL 쿼리에 정통하고 있지 않다).

일부 동적 내용을 바탕으로, 위과 유사한 내 쿼리를 연결된했다. 내가 업데이트하고 레코드 수에 따라 길이가 달라질 수 있지만 내가 생성하는 쿼리의 예입니다 :

INSERT INTO my_table (question_id,ug) VALUES (30,0),(31,1) ON DUPLICATE KEY UPDATE ug=VALUES(ug) 

위의 쿼리는이 오류를 얻고있다 :

Native message: ORA-00933: SQL command not properly ended

나는 쿼리를 실행하는 함수 호출이있는 콘텐츠 관리 시스템을 취급하고있다; 이 프레임 워크 내에서. 나는 그것이 적절한 생각하지 않습니다,하지만 난을 넣어하는 데 필요한 적이없는 ';' 쿼리의 말에, 그러나, 나는 함께하고 세미콜론없이 시도했다.

해결법

  1. ==============================

    1.오라클은 대신 중복 키 업데이트를 사용하여 병합에 없습니다 :

    오라클은 대신 중복 키 업데이트를 사용하여 병합에 없습니다 :

    MERGE INTO my_table trg  
    USING (SELECT 30 as question_id,0 as ug FROM DUAL
    UNION ALL 
    SELECT 31,1 FROM DUAL) src ON (src.question_id = trg.question_id)
    WHEN NOT MATCHED THEN INSERT(question_id, ug) VALUES
    (src.question_id, src.ug)
    WHEN MATCHED THEN UPDATE
    SET trg.ug = src.ug
    
  2. from https://stackoverflow.com/questions/17254018/oracle-on-duplicate-key-update by cc-by-sa and MIT license