【问题标题】:PostgreSQL Insert from declared table (Stored Procedure or Funtion)从声明的表(存储过程或函数)中插入 PostgreSQL
【发布时间】:2020-09-21 13:51:04
【问题描述】:

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

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 将销毁它。 甚至可能吗?如果是这样,有人可以指出我正确的方向吗? 谢谢

【问题讨论】:

    标签: postgresql stored-procedures error-handling transactions


    【解决方案1】:

    你对声明表的想法是错误的。

    如果我有一个表 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;
    

    【讨论】:

      猜你喜欢
      • 2014-10-27
      • 1970-01-01
      • 1970-01-01
      • 2019-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-24
      • 1970-01-01
      相关资源
      最近更新 更多