Backend/DB

[Oracle] ORA-02437: cannot validate (~~) - primary key violated

Emil :) 2020. 10. 6. 11:10
728x90
반응형

문제 사항


뭐..그렇단다

원인 분석


기존에 있던 PK를 변경해야되서 삭제 후 다시 설정하려고했는데, 이런 에러가 났다.

검색해보니까 중복된 값이 존재해서라고 한다.

해결 방법


1. 직접..지우기


이거는 뭐.. 어쩔수가없다. 어떤 내용을 지워야되고 어떤걸 남겨야되는지는 사람이 판단해야 하기때문에..
PK속성을 가지고있던 컬럼들이 어떤게 중복되는지 봐야한다.

필요하다면 SELECT 문으로 뽑아내서 구별 한 뒤에 삭제하던지. 그렇게해야지.

다음은 중복되는 row를 삭제하는 쿼리다. 참고참고~
만약 기본키가 여러개라면 PARTITION BY 컬럼명 << 여기에 A, B, C, D .. 이런식으로 컬럼명 다 써주면됨

DELETE 
FROM   chocolate_table(테이블명) 
WHERE  ROWID IN 
       ( 
              SELECT ROWID 
              FROM   ( 
                            SELECT * 
                            FROM   ( 
                                            SELECT   Row_number() over(PARTITION BY 컬럼명 ORDER BY 컬럼명) AS num 
                                            FROM     chocolate_table(같은 테이블 명) ) 
                            WHERE  num > 1 -- num의 값이 1초과인 데이터들만 삭제 
                     ) );

참고


 

m.blog.naver.com/PostView.nhn?blogId=yka21&logNo=70019484646&proxyReferer=https:%2F%2Fwww.google.com%2F

 

[오라클]ORA-02437: - primary key violated PK 생성문제

[출처]유나패밀리(http://blog.naver.com/cjc07?Redirect=Log&logNo=22151157) ORA-02437: - pri...

blog.naver.com

구독 및 하트는 정보 포스팅 제작에 큰 힘이됩니다♡

728x90
반응형