【问题标题】:Loop over query result in postgresql without using a predefined table在不使用预定义表的情况下在 postgresql 中循环查询结果
【发布时间】:2018-04-21 02:50:47
【问题描述】:

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

这是我目前的功能:

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;) 并获取行类型。

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

谢谢!

【问题讨论】:

  • declare rec record?

标签: postgresql loops


【解决方案1】:

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

你通过name RECORD;声明它

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

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

【讨论】:

  • 是的!谢谢...!
  • @EricBlair1984 很高兴帮助 1984 年的同胞 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-07-26
  • 2017-10-31
  • 1970-01-01
  • 2016-10-20
  • 1970-01-01
  • 2021-02-07
  • 2015-12-01
相关资源
最近更新 更多