首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PostgreSQL错误码,设置自定义错误码

PostgreSQL错误码,设置自定义错误码
EN

Stack Overflow用户
提问于 2018-06-08 22:23:34
回答 1查看 686关注 0票数 1

我正在将Oracle触发器转换为Postgres;到目前为止,我已经将其翻译成postgres

代码语言:javascript
复制
DROP TRIGGER IF EXISTS trg_test_biud ON mytable CASCADE;
CREATE OR REPLACE FUNCTION trigger_fct_trg_test_biud() RETURNS trigger AS $BODY$
DECLARE
    id_ double precision := NULL;
    hour_ varchar(10) := NULL;
BEGIN

    /* INSERT */
    IF TG_OP = 'INSERT' THEN
        BEGIN
            select nextval('myschema.id_audit_mytable_seq') into id_;
            SELECT  TO_CHAR(current_timestamp, 'HH24:MI:SS') INTO hour_;
            INSERT INTO myschema.audit_mytable(id, id_mytable, user_name, event, myhour, hour, geometry)
                VALUES (id_, NEW.code, NEW.user_name, 'INSERT', LOCALTIMESTAMP, hour_, NEW.GEOMETRY);
            RETURN NEW;
            EXCEPTION
            WHEN OTHERS THEN
                RAISE EXCEPTION '%', 'Error when insert into audit_mytable: ' || sqlerrm USING ERRCODE = '-20000';

        END;

    END IF;

END
$BODY$
 LANGUAGE 'plpgsql';

CREATE TRIGGER trg_test_biud
    BEFORE INSERT OR UPDATE OR DELETE ON myschema.mytable FOR EACH ROW
    EXECUTE PROCEDURE trigger_fct_trg_test_biud();

当异常被引发时,我得到这个错误:

代码语言:javascript
复制
ERROR: unrecognized exception condition «-20000»
SQL state: 42704

这是否与Oracle中的“自定义错误代码”是负数有关?postgres不认识这个吗?我查看了这个页面,但它没有显示负数:https://www.postgresql.org/docs/current/static/errcodes-appendix.html

EN

回答 1

Stack Overflow用户

发布于 2018-06-08 23:05:21

Oracle编号-20000不是SQLSTATE,而是专有的错误代码。

必须指定文档附录A中定义的5个字符的SQLSTATE之一。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50762748

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档