PostgreSQL自定义异常?

时间:2010-04-23 15:47:58

标签: exception postgresql plpgsql

在Firebird中,我们可以声明自定义异常,如下所示:

  

CREATE EXCEPTION EXP_CUSTOM_0'异常:自定义异常';

这些存储在数据库级别。在存储过程中,我们可以像这样引发异常:

  

EXCEPTION EXP_CUSTOM_0;

PostgreSQL中是否有相同的内容?

1 个答案:

答案 0 :(得分:8)

不,不是这样的。但是你可以提出并维护自己的异常,没问题:

CREATE TABLE exceptions(
    id serial primary key,
    MESSAGE text, 
    DETAIL text, 
    HINT text, 
    ERRCODE text
);

INSERT INTO exceptions (message, detail, hint, errcode) VALUES ('wrong', 'really wrong!', 'fix this problem', 'P0000');

CREATE OR REPLACE FUNCTION foo() RETURNS int LANGUAGE plpgsql AS
$$
DECLARE
    row record;
BEGIN
    PERFORM * FROM fox; -- does not exist, undefined_table, fail

    EXCEPTION
        WHEN undefined_table THEN
            SELECT * INTO row FROM exceptions WHERE id = 1; -- get your exception
            RAISE EXCEPTION USING MESSAGE = row.message, DETAIL = row.detail, HINT = row.hint, ERRCODE = row.errcode;

    RETURN 1;
END;
$$

SELECT foo();

在你的程序中,你也可以将它们硬编码,这取决于你。