捕获所有错误 psql 函数异常
Catch all error psql function exception
我正在编写一个具有异常捕获和忽略功能的函数。我想捕获所有异常并忽略它。无论如何都可以捕获所有异常而不是单独捕获?
CREATE OR REPLACE FUNCTION ADD_TABLE_TO_ARCHIVE (a TEXT, b TEXT)
RETURNS INTEGER AS $SUCCESS$
DECLARE SUCCESS INTEGER;
BEGIN
SUCCESS = 0;
BEGIN
UPDATE ARCHIVE_STATUS
SET *****
WHERE ***;
SUCCESS = 1;
EXCEPTION
WHEN UNIQUE_VIOLATION
SUCCESS = 0;
END;
RETURN SUCCESS;
END;
$SUCCESS$ LANGUAGE plpgsql;
代替唯一例外,它应该是任何例外...
您可以使用 EXCEPTION WHEN OTHERS
子句:
BEGIN
do something
EXCEPTION WHEN OTHERS THEN
handle any exception
END;
无一例外地使用此子句不是一个好主意。当您使用此模式时,调试、问题诊断可能会很糟糕。这是一个强大的功能(有时是必要的),但很危险!
注意 - 受保护部分的入口、末端离开负载很大。保存点和释放保存点的开销不小。此构造的开销 显着高于 Oracle(尽管在视觉上相似,但它做的事情不同)。虽然这段代码看起来像 PL/SQL 中的代码,但实现方式完全不同。如果您希望您的应用程序负载更高,请谨慎使用它(不要在循环内,...)
我正在编写一个具有异常捕获和忽略功能的函数。我想捕获所有异常并忽略它。无论如何都可以捕获所有异常而不是单独捕获?
CREATE OR REPLACE FUNCTION ADD_TABLE_TO_ARCHIVE (a TEXT, b TEXT)
RETURNS INTEGER AS $SUCCESS$
DECLARE SUCCESS INTEGER;
BEGIN
SUCCESS = 0;
BEGIN
UPDATE ARCHIVE_STATUS
SET *****
WHERE ***;
SUCCESS = 1;
EXCEPTION
WHEN UNIQUE_VIOLATION
SUCCESS = 0;
END;
RETURN SUCCESS;
END;
$SUCCESS$ LANGUAGE plpgsql;
代替唯一例外,它应该是任何例外...
您可以使用 EXCEPTION WHEN OTHERS
子句:
BEGIN
do something
EXCEPTION WHEN OTHERS THEN
handle any exception
END;
无一例外地使用此子句不是一个好主意。当您使用此模式时,调试、问题诊断可能会很糟糕。这是一个强大的功能(有时是必要的),但很危险!
注意 - 受保护部分的入口、末端离开负载很大。保存点和释放保存点的开销不小。此构造的开销 显着高于 Oracle(尽管在视觉上相似,但它做的事情不同)。虽然这段代码看起来像 PL/SQL 中的代码,但实现方式完全不同。如果您希望您的应用程序负载更高,请谨慎使用它(不要在循环内,...)