2
내 Oracle에 같은 레코드를 삽입하는 것을 방지하는 예외가 있습니다.테이블에 기본 키 값이있는 레코드가 있는지 확인하려면 어떻게합니까?
spcific Key 값이있는 레코드가 이미있는 경우 레코드 삽입 인터페이스를 사용하도록 설정해야합니다.
COUNT (*)에 사용하고 싶지 않은 많은 비용이 있다고 들었습니다.
최소 비용으로 만들 수있는 다른 방법이 있습니까?
내 Oracle에 같은 레코드를 삽입하는 것을 방지하는 예외가 있습니다.테이블에 기본 키 값이있는 레코드가 있는지 확인하려면 어떻게합니까?
spcific Key 값이있는 레코드가 이미있는 경우 레코드 삽입 인터페이스를 사용하도록 설정해야합니다.
COUNT (*)에 사용하고 싶지 않은 많은 비용이 있다고 들었습니다.
최소 비용으로 만들 수있는 다른 방법이 있습니까?
는 클라이언트의 언어를 지정하지 않기 때문에 나는 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 그러나 두 번째 옵션은 100 % 신뢰할 수 없습니다. 두 세션이 동일한 키 값을 동시에 삽입하려고 시도하면 기본 키 위반으로 실패 할 수 있습니다. –
JAVA/JSP에서 작업하고 있는데, 앱에서 버튼을 비활성화하여 레코드를 삽입하도록 설정했는지 확인해야합니다. – KIM