【发布时间】:2021-03-12 01:12:50
【问题描述】:
是否有任何 Postgres 替代异常 DUP_VAL_ON_INDEX?我正在将数据库从 Oracle 迁移到 PostgreSQL。
我的查询示例:
EXCEPTION
WHEN DUP_VAL_ON_INDEX
THEN
BEGIN
UPDATE BTPN_INS_PEOPLE_EXT
SET EFFECTIVE_END_DATE = NULL,
REGISTER_DATE = l_dMakerDate,
PASSPORT_NO = l_vPassportNo,
FAMILY_CARD_NO = l_vFamilyCardNo,
UPDATE_BY = i_vUSER_ID,
UPDATE_ON = SYSDATE,
RECORD_FLAG = 'U'
WHERE PERSON_ID = l_nMainPersonId
AND EFFECTIVE_START_DATE = TRUNC (SYSDATE);
SELECT INTERNALID
INTO l_nPeopleExtId
FROM BTPN_INS_PEOPLE_EXT
WHERE PERSON_ID = l_nMainPersonId
AND EFFECTIVE_START_DATE = TRUNC (SYSDATE)
AND EFFECTIVE_END_DATE IS NULL
AND ROWNUM = 1;
【问题讨论】:
-
您在寻找
unique_violation吗? -
无需在 Postgres 中捕获异常。请改用
insert ... on conflict (...) do update ... -
更新后也不需要 SELECT。在 Postgres 中,您可以使用
update ... returning .. into
标签: postgresql exception database-migration plpgsql