考虑函数内的以下(不完整的)PL/pgSQL 块:
CREATE OR REPLACE FUNCTION my_calc(myvar1 NUMERIC, myvar2 NUMERIC)
RETURNS NUMERIC
RETURNS NULL ON NULL INPUT
IMMUTABLE
LANGUAGE plpgsql
AS $$
BEGIN
RETURN some_third_party_function(myvar1, myvar2);
EXCEPTION WHEN internal_error THEN
IF SQLERRM LIKE 'KnownErrorPrefix:%' THEN
RETURN 0;
ELSE
-- Reraise the original exception here
RAISE EXCEPTION '%', SQLERRM;
END IF;
END
$$
当发生意外错误时,此代码将抛出具有相同消息的新异常。但是,它不会保留原始类型或上下文。
如何重新引发或重新抛出未修改的原始异常?
您可以
RAISE
不带任何参数使用。这记录在错误和消息页面上: