2010-04-23 19 views
2

En Firebird on peut déclarer des exceptions personnalisées comme ceci:Exceptions personnalisées PostgreSQL?

CREATE EXP_CUSTOM_0 EXCEPTION 'Exception: exception personnalisée';

sont stockées au niveau de la base de données. Dans les procédures stockées, nous pouvons lever l'exception comme suit:

EXCEPTION EXP_CUSTOM_0;

Existe-t-il un équivalent dans PostgreSQL?

Répondre

7

Non, pas comme ça. Mais vous pouvez augmenter et maintenir vos propres exceptions, pas de problème:

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 vous pouvez également les hardcoded dans vos procédures, c'est à vous.