oracle ORA-00001: 违反了唯一约束主键

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/26745508/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-09 00:39:34  来源:igfitidea点击:

ORA-00001: unique constraint primary key violated

oracleunique-constraint

提问by Akarsh Kolanu

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;

Here is the SQL part and I am getting error when I debug the code:

这是 SQL 部分,调试代码时出现错误:

ORA-00001: unique constraint primary key violated At T_LIAV_AGENT_STATE_APPROVAL...

ORA-00001: 在 T_LIAV_AGENT_STATE_APPROVAL 处违反了唯一约束主键...

and these are the 2 columns which the primary key constraint relies on AV_NAME_ID, AV_STATE..

这些是主键约束依赖的 2 列 AV_NAME_ID, AV_STATE..

There is no duplicate data as per me ...Do you think any other reason?

根据我的说法没有重复的数据......你认为还有其他原因吗?

回答by Dmitriy

If you have 'CREATE TABLE' privilege, use dbms_errlog package.

如果您有“CREATE TABLE”权限,请使用 dbms_errlog 包。

  1. Run script:

    begin
      dbms_errlog.create_error_log('DBO.T_LIAV_AGENT_STATE_APPROVAL');
    end;
    /
    
  2. Run your INSERT script with an additional clause:

    INSERT INTO dbo.T_LIAV_AGENT_STATE_APPROVAL
    SELECT ...
    FROM ...
    LOG ERRORS INTO err$_T_LIAV_AGENT_STATE_APPROVAL REJECT LIMIT UNLIMITED;
    
  3. Check error logging table for errors:

    select * from err$_T_LIAV_AGENT_STATE_APPROVAL;
    
  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;
    

You will see all records, that violated constraints, and error messages.

您将看到所有违反约束的记录和错误消息。

回答by Akarsh Kolanu

Select statement was missing a column when compared to Insert table statement so there was this error. When i added that column to the select statement it worked perfectly.

与 Insert table 语句相比,Select 语句缺少一列,因此出现此错误。当我将该列添加到 select 语句时,它运行良好。

回答by Shreya Srivastava

If you are not sure which unique constraint was violated, you can run the following SQL:

如果您不确定违反了哪个唯一约束,可以运行以下 SQL:

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