Коды ошибок PostgreSQL, установите пользовательский код ошибки - PullRequest
0 голосов
/ 08 июня 2018

Я перевожу триггер Oracle в Postgres;Я перевел это в postgres

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();

Когда возникает исключение, я получаю эту ошибку:

ERROR: unrecognized exception condition «-20000»
SQL state: 42704

Это связано с тем, что в Oracle 'Пользовательский код ошибки "является отрицательным числом?Postgres не признает это?Я проверил эту страницу, но она ничего не говорит об отрицательных числах: https://www.postgresql.org/docs/current/static/errcodes-appendix.html

1 Ответ

0 голосов
/ 08 июня 2018

Номер Oracle -20000 - это не SQLSTATE, а собственный код ошибки.

Вы должны указать один из 5-символьных SQLSTATE, определенных в приложении A документации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...