当前位置: 首页 > 知识库问答 >
问题:

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

韶浩皛
2023-03-14
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:唯一约束主键违反T_LIAV_AGENT_STATE_APPROVAL...

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

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

共有3个答案

暨嘉
2023-03-14

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

Select Distinct table_name
From all_indexes
Where index_name = 'CONSTRAINT_NAME';
上官修文
2023-03-14

与Insert table语句相比,Select语句缺少一列,因此出现此错误。当我将该列添加到select语句时,它工作得非常好。

吕昀
2023-03-14

如果您有“创建表”权限,请使用dbms\u errlog包。

>

begin
  dbms_errlog.create_error_log('DBO.T_LIAV_AGENT_STATE_APPROVAL');
end;
/

使用附加子句运行您的INSERT脚本:

INSERT INTO dbo.T_LIAV_AGENT_STATE_APPROVAL
SELECT ...
FROM ...
LOG ERRORS INTO err$_T_LIAV_AGENT_STATE_APPROVAL REJECT LIMIT UNLIMITED;

检查错误记录表中的错误:

select * from err$_T_LIAV_AGENT_STATE_APPROVAL;

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

 类似资料:
  • 我正试图插入数据库,但我在日志上看到了这样的消息: 我找到了这个查询以获取违反的密钥:

  • 我有两张表, 但我做了一个组声明,以确保from\t的名称是唯一的: 我不确定我是否正确理解了这个问题。我尽了我所能,但仍然没有运气。

  • 问题内容: 我正在使用Oracle数据库。我们的服务呼叫频繁失败。当我查看日志时,在表上看到以下异常 java.sql.BatchUpdateException:ORA-00001:违反了唯一约束(DBSCHEMA.IDX_CO_DETAILS)。 我已经检查了表上索引的索引名称DBSCHEMA.IDX_CO_DETAILS。 它不包含任何列的(INCLUDE_COLUMN为null)。我怎么知道

  • 问题内容: 目标: 交换两个记录的主键,而不会遇到ORA-00001:违反了唯一约束。“可行”的解决方案(在下文中)只是一个破解。是否有一项功能/技术可以将约束执行推迟到提交事务之前? motivation -使用此数据的遗留应用程序存在设计缺陷,并且依赖于ID顺序和值-请求是按以下方式交换PK值: What doesn’t Work: Hack/Solution that ‘works’ Tab

  • 我有一个迁移脚本之间的2个不同的模式数据库。脚本做了3件事:1。禁用约束2。将记录从旧架构插入到新架构3。启用约束 我发现这两个约束在旧的模式中是不存在的。这2个表的表结构定义有什么问题吗?