2010-06-02 4 views

답변

5

는 클라이언트의 언어를 지정하지 않기 때문에 나는 PL/SQL 코드 조각을 표시했습니다

BEGIN 
    INSERT INTO table (pk_col, col_a, col_b) VALUES (:pk, :col_a, :col_b); 
EXCEPTION 
    WHEN DUP_VAL_ON_INDEX THEN 
    UPDATE table SET col_a = :col_a, col_b = :col_b WHERE pk_col = :pk; 
END; 

또는

BEGIN 
    UPDATE table SET col_a = :col_a, col_b = :col_b WHERE pk_col = :pk; 
    IF SQL%ROWCOUNT = 0 THEN 
    INSERT INTO table (pk_col, col_a, col_b) VALUES (:pk, :col_a, :col_b); 
    END IF; 
END; 

두 가지 선택 (예 : PHP, 파이썬있다 ...). 예외를 처리하거나 SQL % ROWCOUNT를 다르게 점검 할 수 있습니다.

+1

+1 그러나 두 번째 옵션은 100 % 신뢰할 수 없습니다. 두 세션이 동일한 키 값을 동시에 삽입하려고 시도하면 기본 키 위반으로 실패 할 수 있습니다. –

+0

JAVA/JSP에서 작업하고 있는데, 앱에서 버튼을 비활성화하여 레코드를 삽입하도록 설정했는지 확인해야합니다. – KIM

관련 문제