2012-03-06 2 views
2

두 개의 테이블이있는 응용 프로그램에서 작업하도록 할당되었으므로 MY_TABLE_ONEMY_TABLE_TWO으로 호출합니다. 사용자가 양식에 데이터를 입력하면 데이터는 MY_TABLE_ONE에 입력됩니다. 이이 완료되면, 데이터베이스 패키지가 기본적으로 다음과 같은 작업을 수행하는 트리거 : 최대 찾고존재하지 않는 Oracle Database 제약 조건 Violated

ORA-00001: unique constraint 
(MY_SCHEMA.MY_TABLE_TWO_UK01) violated 
ORA-06512: at "MY_SCHEMA.MY_PACKAGE", line 2 
ORA-06512: at line 1 

: 어떤 이유

DELETE FROM MY_TABLE_TWO; 

INSERT INTO MY_TABLE_TWO 
mto.COLUMN_ONE, 
moto.COLUMN_TWO, 
mott.COLUMN_THREE 
FROM MY_TABLE_ONE mto, MY_OTHER_TABLE_ONE moto, MY_OTHER_TABLE_TWO mott 
WHERE mto.OTHER_TABLE_ONE_UUID = moto.UUID 
AND mto.OTHER_TABLE_TWO_UUID = mott.UUID; 

,이 패키지의 메시지와 함께 삽입에 실패했다 MY_TABLE_TWO의 제약 조건에는 MY_TABLE_TWO_UK01 제약 조건이 없습니다. 그러나 MY_TABLE_TWO_UK 제약 조건이있어 3 개의 삽입 된 열이 고유해야합니다. 나는 다음과 같은 쿼리를 실행하는 경우 :

SELECT mto.COLUMN_ONE, moto.COLUMN_TWO, mott.COLUMN_THREE, COUNT(*) AS COUNTER 
FROM MY_TABLE_ONE mto, MY_OTHER_TABLE_ONE moto, MY_OTHER_TABLE_TWO mott 
WHERE mto.OTHER_TABLE_ONE_UUID = moto.UUID 
AND mto.OTHER_TABLE_TWO_UUID = mott.UUID 
GROUP BY mto.COLUMN_ONE, moto.COLUMN_TWO, mott.COLUMN_THREE 
ORDER BY COUNTER DESC; 

를 다음 카운트 모든 것을 제약 조건을 위반하고있는 것처럼 1. 그래서 보이지 않는 수 있습니다.

누가 무슨 일이 일어나고 있는지 아이디어가 있습니까? 제약 조건 이름에 대해 01이 어디에서 왔는지 확신 할 수 없습니다. 그리고 제약 조건을 위반 한 부분을 찾을 수 없습니다. `

+1

이 체크 인해 제약 –

+0

@SamHolder에 당신에게 아무것도 말하지 않을 것이다 인덱스입니다하지만 난에서 당겨입니다 MY_TABLE_ONE'. 나는 당신이'MY_TABLE_TWO'에 그들을 삽입하려고 할 때 오류를 던지고있는 중복을 찾고 있습니다. 개수가 2 이상이면 제약 조건 위반 행이 표시됩니다. –

+0

오라클 만이 오류 메시지에서 '고유 인덱스 제약 조건 위반'과 같은 말을하기를 귀찮아하는 경우. –

답변

13

은 분명히 카운트가 1이기 때문에 중복 데이터가 삽입되지 않는

select * from all_ind_columns where index_name = 'MY_TABLE_TWO_UK01'; 
+0

해당 색인이 존재하는 것으로 보입니다 (나는 아무것도 반환하지 않은 SQL이 아닌 Toad UI를 사용했습니다). 다른 3 개의 열과 연결되어있는 것으로 보입니다. 그러나 이러한 3 개의 열을 사용하는 그룹화는 여전히 1 카운트 만 산출합니다. 색인에 대해 침해당하는 내용이 있습니까? –

+0

아, 긁어. 내 스크립트에서 열을 삭제하지 못했습니다. 도와 주셔서 감사합니다. 카운트 스크립트는 이제 문제를 나타내는 2를 산출합니다. 조사 할게. –

+0

+1 도움을 주셔서 감사합니다. 멋진 이름. I <3 2001. –