什么 PL/pgSQL 异常与 PostgreSQL 中 Oracle 的 VALUE_ERROR 等效?

Posted

技术标签:

【中文标题】什么 PL/pgSQL 异常与 PostgreSQL 中 Oracle 的 VALUE_ERROR 等效?【英文标题】:What PL/pgSQL exception is the equivalent for Oracle's VALUE_ERROR in PostgreSQL? 【发布时间】:2018-08-21 08:45:19 【问题描述】:

我正在编写一个带有异常的函数,该函数相当于在 PostgreSQL 中的 Oracle 中捕获 VALUE_ERROR。 PostgreSQL中有替代品吗?

CREATE OR REPLACE FUNCTION TEST (a TEXT, b TEXT)
RETURNS INTEGER AS $SUCCESS$
DECLARE SUCCESS INTEGER;
BEGIN
    SUCCESS = 0;
    BEGIN
        UPDATE TABLE_TEST
        SET *****
        WHERE ***;
        SUCCESS = 1;
    EXCEPTION
        WHEN VALUE_ERROR /* throwing error as there is no value-error in postgres */
        SUCCESS = 0;

        UPDATE TABLE_TEST
        SET *****
        WHERE ***;
        SUCCESS = 2;

       WHEN OTHERS THEN
        SUCCESS = 3;

        UPDATE TABLE_TEST
        SET *****
        WHERE ***;
        SUCCESS = 4;
    END;

   RETURN SUCCESS;
END;
$SUCCESS$ LANGUAGE plpgsql;

代替 value_error 异常,它应该是 PostgreSQL 中的等价物。

【问题讨论】:

为什么不直接在postgres中执行操作,看看引发了什么类型的异常? 【参考方案1】:

我会使用data_exception,请参阅the documentation。

这实际上是一类例外,涵盖了所有数据可能出错的情况,但我会说它是最好的替代品。

【讨论】:

@Syedasamreenanjum 如果解决了您的问题,请接受答案。

以上是关于什么 PL/pgSQL 异常与 PostgreSQL 中 Oracle 的 VALUE_ERROR 等效?的主要内容,如果未能解决你的问题,请参考以下文章

PL/pgSQL:删除(更新)与记录匹配的行

pl/pgsql 与针对 sql 注入攻击的准备好的语句

PL/pgSQL 中 PL/SQL %NOTFOUND 的等价物是啥?

PL/pgSQL 语法错误

如何在 PL/pgSQL 中创建嵌套函数?

为啥我不能从 pgAdmin pgScript 调用 PL/pgSQL 函数?