【发布时间】:2014-11-04 21:37:58
【问题描述】:
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 ..
据我所知,没有重复的数据...您认为还有其他原因吗?
【问题讨论】:
-
"据我所知没有重复数据" - 但 Oracle 认为存在重复数据,我相信这里的 Oracle。
-
一个原因,您在多个列中有
UNIQUE,包括SYSDATE.. 尝试TRUNC(SYSDATE)将时间元素全部取消为00:00:00 -
@MaheswaranRavisankar SQL 语句中的所有 SYSDATE 都将解析为完全相同的时间。请参阅我对类似问题的回答here。
-
@JonHeller 感谢您提供这么好的信息...我希望我不知道很多事情!!!!