我创建了一个循环查询结果的函数,它运行正常。我想让它工作,而不必预先创建一个表来存储结果。即,我只想迭代行。事实上,我不确定如何声明一条记录,该记录与没有要检查的内容时返回的行类型相同。
这是我目前的职能:
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;)并获取行类型。
如何在不预先定义结果表的情况下循环查询此查询?
谢谢!
答案 0 :(得分:1)
RECORD类型是行型变量,没有预定义的结构。
您可以通过执行name RECORD;
记录变量与行类型变量类似,但它们没有 预定义结构。它们采用行的实际行结构 它们在SELECT或FOR命令期间分配。的子结构 记录变量每次分配时都可以更改。一个 这样做的结果是直到首次分配记录变量 to,它没有子结构,以及任何访问其中字段的尝试 将绘制运行时错误。
将myschema.tmpfiles%rowtype
更改为RECORD
,您应该没问题。