在不使用预定义表的情况下在postgresql中循环查询结果

时间:2018-04-20 18:39:19

标签: postgresql loops

我创建了一个循环查询结果的函数,它运行正常。我想让它工作,而不必预先创建一个表来存储结果。即,我只想迭代行。事实上,我不确定如何声明一条记录,该记录与没有要检查的内容时返回的行类型相同。

这是我目前的职能:

CREATE OR REPLACE FUNCTION dimensions.testing()
RETURNS void
LANGUAGE plpgsql
AS $body$
DECLARE rec myschema.tmpfiles%rowtype;
BEGIN

insert into myschema.tmpfiles(file_name, log_date)  
    SELECT f.file_name, f.log_date from dblink('conn', 'select 
file_name, log_date from myschema.process_tracker where 
isprocessed = FALSE') as f(file_name varchar, log_date date);

IF EXISTS (SELECT 1 FROM myschema.tmpfiles) THEN
    for rec in select * from myschema.tmpfiles
loop
        RAISE NOTICE '%', rec.file_name;
        RAISE NOTICE '%', rec.log_date;
        RAISE NOTICE '---------------------------';
end loop;           
ELSE
    --DO SOMETHING
END IF;

END;
$body$

工作正常,但它需要一个预定义的表,以便我这样做:(DECLARE rec myschema.tmpfiles%rowtype;)并获取行类型。

如何在不预先定义结果表的情况下循环查询此查询?

谢谢!

1 个答案:

答案 0 :(得分:1)

RECORD类型是行型变量,没有预定义的结构。

您可以通过执行name RECORD;

来声明它
  

记录变量与行类型变量类似,但它们没有   预定义结构。它们采用行的实际行结构   它们在SELECT或FOR命令期间分配。的子结构   记录变量每次分配时都可以更改。一个   这样做的结果是直到首次分配记录变量   to,它没有子结构,以及任何访问其中字段的尝试   将绘制运行时错误。

myschema.tmpfiles%rowtype更改为RECORD,您应该没问题。