gpt4 book ai didi

postgresql - 另一个函数中的 SQLSTATE 和 GET STACKED DIAGNOSTICS 信息?

转载 作者:行者123 更新时间:2023-11-29 12:50:02 25 4
gpt4 key购买 nike

在一个 plpgsql 函数中,我有这样的异常 block :

exception when others then 
txt := 'error text ';
perform record_error(id, table, txt);

当发生异常时,我想执行另一个函数,它将有关错误的信息添加到日志表中,如下所示:

CREATE OR REPLACE FUNCTION record_error(
id integer,
layer text,
message text)
RETURNS void AS
$BODY$

DECLARE
l_code integer:= 'sqlstate'
l_mesg varchar:= 'SQLERRM';
l_context text;
l_detail text;
BEGIN

GET STACKED DIAGNOSTICS l_context = PG_EXCEPTION_CONTEXT;

GET STACKED DIAGNOSTICS l_detail = PG_EXCEPTION_DETAIL;

INSERT INTO error_log ( error_code ,
error_message ,
backtrace ,
callstack ,
created_on ,
created_by ,
user_msg ,
etak_id ,
layer )
VALUES (l_code ,
l_mesg ,
l_context,
l_detail ,
current_timestamp ,
CURRENT_USER ,
message ,
ETAK_ID ,
Layer );

END;
$BODY$
LANGUAGE plpgsql VOLATILE

但我收到一条消息错误:无法在异常处理程序之外使用 GET STACKED DIAGNOSTICS。

我可以在另一个函数中使用 SQLSTATE 和 GET STACKED DIAGNOSTICS 信息吗?

最佳答案

这是不可能的。此限制的原因是 SQL 函数中异常和异常处理的实现。因为这样做没有意义,所以语法上是禁止的。

关于postgresql - 另一个函数中的 SQLSTATE 和 GET STACKED DIAGNOSTICS 信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56471876/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com