insert 시 중복 체크 0 8 1,081

by 권사마 [PL/SQL] [2018.04.10 17:52:36]


package 에서, 테이블에 insert 를 할시 중복 체크해서 

insert를 하려고 합니다. 아래처럼 중복 체크 구문을 넣긴했는데, 이상하게도 몇초차이라 중복된 

데이터가 들어갔었습니다. 아래 방식 말고 insert 시에 효율적으로 중복 체크하여 중복된 값은 저장이 안되도록 할 수 있을까요?  테이블에 두 개의 컬럼에 pk  가 걸려있어서 중복된 데이터가 들어갈 수 있는 구조입니다. pk 변경은 어려운 실정이구요...  아래 prono 컬럼이 중복된 데이터가 들어가지 못하도록 막고 싶습니다.

---------- pcakage 구문 --------------

      --중복체크
                SELECT COUNT(*) 
                  INTO sROW_CNT
                FROM TEST
                WHERE PRONO = '10';                

                IF sROW_CNT > 0 THEN
                    RAISE_APPLICATION_ERROR(-20000,'중복되었습니다.');
                END IF;

                INSERT INTO TEST (
                   PRONO
                  ,ITEM                  
                ) VALUES (
                   '10'
                  ,'ABC'
                );

by 마농 [2018.04.10 17:57:51]

Unique Index 를 만드세요.


by 권사마 [2018.04.11 10:15:27]

두개의 컬럼에 pk 라서 prono+item 이렇게 pk가 걸려있는데요..

추가로 unique index 를 prono 컬럼만 할 수 있나요?


by 마농 [2018.04.11 10:29:44]

네. 가능합니다.


by 우리집아찌 [2018.04.10 18:16:35]

sequence를 이용하는 방법도 있습니다.


by 케를로스 [2018.04.11 10:24:00]

PRONO에 ITME이 PK인데

PRONO값만 유일해야한다면

merge 문을 이용하는 것은 어떠신가요??

MERGE 
    INTO TEST A
 USING (SELECT '10' PRONO
                           ,  'ABC' ITEM
                 FROM DUAL
              )  B
       ON (A.PRONO = B.PRONO)
WHEN NOT MATCHED THEN 
   INSERT (PRONO, ITEM) VALUES (B.PRONO, B.ITEM)

 


by 권사마 [2018.04.11 11:12:58]

매치가 될때 오류 메세지를 보낼수 있나요?  매치가 될때는 update 구문만 들어갈 수 있는 같아서요


by 케를로스 [2018.04.11 11:37:02]

SQL%ROWCOUNT 를 이용해서 찍어주시면 되지않을까요?


by 마농 [2018.04.11 12:26:49]

굳이 어렵게 일일히 코딩하려고 하시나요?
유니크만 걸어 놓으시면 코딩 없이 에러 자동 발생됩니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입