【问题标题】:oracle DUP_VAL_ON_INDEX for PostgreSQL?用于 PostgreSQL 的 oracle DUP_VAL_ON_INDEX?
【发布时间】: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


【解决方案1】:

正如评论中已经提到的,

DUP_VAL_ON_INDEX(在 oracle 中)的替换是 PostgreSQL 中的unique_violation

在PostgreSQL文档here的错误代码中提到

【讨论】:

    猜你喜欢
    • 2010-09-25
    • 2020-01-17
    • 1970-01-01
    • 2018-07-18
    • 2012-12-27
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    相关资源
    最近更新 更多