2010-04-23 144 views
2

在火鸟,我们可以宣布自定义异常,像这样:PostgreSQL的自定义异常?

创建异常EXP_CUSTOM_0“异常:自定义异常”;

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

EXCEPTION EXP_CUSTOM_0;

有PostgreSQL中的相同呢?

回答

7

不,不是这样。但是你可以提高和维护自己的异常,没有任何问题:

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

Offcourse你也可以让他们在你的程序中的硬编码,这是给你的。