2014-11-04 7 views
1
DELETE from dbo.T_LIAV_AGENT_STATE_APPROVAL SAP 
WHERE EXISTS (SELECT UNIQUE 1 FROM MCS_SYNC_STATE_APPR APP 

       inner join MCS_SYNC_NAME SN on SN.SE_NAME_ID = APP.SE_NAME_ID 
            and SN.ACTION in('U','S') 
       Where APP.SE_name_id = SAP.AV_NAME_ID 
       and APP.SYNC_INSTANCE_ID = param_inst_ID); 
COMMIT; 

INSERT INTO dbo.T_LIAV_AGENT_STATE_APPROVAL 

SELECT UNIQUE 

    APP.SE_NAME_ID   AS AV_NAME_ID, 
    APP.STATE     AS AV_STATE, 
    APP.APPROVAL_TYPE   AS AV_APPROVAL_TYPE, 
    APP.START_DATE   AS AV_START_DATE, 
    APP.END_DATE    AS AV_END_DATE, 
    APP.APPOINTED    AS AV_APPOINTED, 
    APP.RENEWAL_DATE   AS AV_RENEWAL_DATE, 
    APP.LICENSE    AS AV_LICENSE, 
    COMPANY_NAME_ID   as AV_COMPANY_CODE, 
    SYSDATE     AS TSTAMP, 
    SYNC_USER_NAME_ID   AS AV_FIRST_USER_ID, 
    SYSDATE     AS AV_FIRST_DATE, 
    NULL      AS AV_LAST_USER_ID, 
    NULL      AS AV_LAST_DATE 

FROM MCS_SYNC_STATE_APPR APP 

WHERE exists (select 1 from t_liag_agent AG 
        where AG.ag_name_id = APP.SE_NAME_ID) 
and APP.SYNC_INSTANCE_ID = param_inst_ID; 

여기에 SQL 부분이 있으며 코드에서 디버그 할 때 ORA-00001: unique constraint primary key violated 오류가 발생합니다. T_LIAV_AGENT_STATE_APPROVAL에서 ... 그리고 이것들은 기본 키 제약이 AV_NAME_ID, AV_STATE에서 릴랙스하는 두 개의 칼럼입니다.ORA-00001 : 고유 제약 조건 기본 키가 위반되었습니다.

저에게 중복되는 데이터는 없습니다 ... 다른 이유가 있습니까?

+6

"* 나를 따라 중복 데이터가없는 *을"-하지만 오라클은 중복 된 데이터와 I가 생각 여기 오라클을 신뢰합니다. –

+1

하나의 이유는'SYSDATE'를 포함하여 여러 컬럼에 대해 'UNIQUE'를 가지고 있기 때문입니다.'00 : 00 : 00'에 시간 요소를 모두 무효화하려면'TRUNC (SYSDATE) '시도하십시오. –

+1

@MaheswaranRavisankar SQL 문의 모든 SYSDATE가 해결됩니다 정확히 같은 시간에. 비슷한 질문 [내 대답] (http://stackoverflow.com/questions/7954509/sysdate-difference)을 참조하십시오. –

답변

0

Select SQL 문과 비교할 때 Select 문에 열이 없으므로이 오류가있었습니다. select 문에 해당 열을 추가하면 완벽하게 작동합니다.

5

'CREATE TABLE'권한이있는 경우 dbms_errlog 패키지를 사용하십시오.

  1. 스크립트 실행 :

    begin 
        dbms_errlog.create_error_log('DBO.T_LIAV_AGENT_STATE_APPROVAL'); 
    end; 
    /
    
  2. 추가 조항으로 INSERT 스크립트를 실행 오류

    INSERT INTO dbo.T_LIAV_AGENT_STATE_APPROVAL 
    SELECT ... 
    FROM ... 
    LOG ERRORS INTO err$_T_LIAV_AGENT_STATE_APPROVAL REJECT LIMIT UNLIMITED; 
    
  3. 확인 오류 로깅 테이블 :

    select * from err$_T_LIAV_AGENT_STATE_APPROVAL; 
    

제약 조건을 위반 한 모든 레코드와 오류 메시지가 표시됩니다.

0

당신이 위반 된 고유 한 제약 확실하지 않은 경우, 다음과 같은 SQL 실행할 수 있습니다

Select Distinct table_name 
From all_indexes 
Where index_name = 'CONSTRAINT_NAME';