在 Firebird 中,我们可以像这样声明自定义异常:
CREATE EXCEPTION EXP_CUSTOM_0 'Exception: Custom exception';
这些存储在数据库级别。在存储过程中,我们可以像这样引发异常:
EXCEPTION EXP_CUSTOM_0 ;
PostgreSQL 中是否有等效项?
最佳答案
不,不是这样的。但是您可以引发和维护自己的异常,没问题:
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();
当然,您也可以将它们硬编码到您的程序中,这取决于您。
关于exception - PostgreSQL 自定义异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2699958/