gpt4 book ai didi

postgresql - PostgreSQL从声明的表中插入(存储过程或函数)

转载 作者:行者123 更新时间:2023-12-03 08:38:55 25 4
gpt4 key购买 nike

假设您已经在存储过程或函数中声明了表

DECLARE
lt_error "SCHEMA".err_log;
该表将保存我们正在执行的流程中将出现的所有错误。
假设现在我已经填满了这个表,我想以某种方式遍历它的记录并对其进行处理。
SELECT * FROM "SCHEMA".err_log INTO lt_error.
ROLLBACK; -- Need to have this here.

LOOP through lt_error;
-- Do something with your record
END LOOP;
我知道我们可以循环使用游标,但是由于ROLLBACK,我目前无法使用游标。
最重要的是,我需要保留在此过程中创建的日志表中的信息,并且ROLLBACK会销毁它。
可能吗如果是这样,有人可以指出我正确的方向吗?
谢谢

最佳答案

您对声明的表的想法是错误的。
如果我有一个表foo,那么

DECLARE foo_var foo;
这没有声明表变量。该声明的复合变量具有与表 foo相同的结构。但是此复合变量只能保存一个记录(一行)。 Postgres不支持表变量。相反,您可以使用复合变量数组:
DECLARE
foo_var_array foo[];
foo_var_rec foo;
BEGIN
foo_var_array := ARRAY(SELECT foo FROM foo);
FOREACH foo_var_rec IN ARRAY foo_var_array
LOOP
RAISE NOTICE 'row %', foo_var_rec;
END LOOP;
END;

关于postgresql - PostgreSQL从声明的表中插入(存储过程或函数),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63993715/

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