exception - PostgreSQL 自定义异常?

标签 exception postgresql plpgsql

在 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/

相关文章:

java - ArrayList 迭代给出异常 java.util.ConcurrentModificationException

sql - 使用触发器将 postgres SQL 插入语句拆分为 2 个表

sql - 如何从Postgres中的函数向另一个表中插入错误?

postgresql - 触发器更新另一个表

postgresql - 通过循环生成[0, 1001]中不重复的随机数的随机数

java - java SecurityManager checkPermission(Permission perm) 的异常处理问题

php - `[Exception] DateTime::__construct(): ` 依赖系统的时区设置是不安全的

c++ - MySQL C++ 连接器循环

postgresql - 撤销 PostgreSQL 中插入函数的执行权限

python - 如何在 Django 或 SQL 中查询 Non Unique Together 值?