我必须编写一个PL / pgSQL存储过程,它有两个输入 第一个输入应该进入一个返回一组时间戳的选择。
使用这些返回的时间戳,我打算循环第二个选择,它接受函数的第二个输入并返回我必须在循环的迭代中收集的单个行。然后我组装第二个选择的输出并将其作为结果集返回。
FUNCTION (Input A B)
SELECT FROM T1 WHERE X = A INTO RS1.
LOOP VAL OVER RS1
Select FROM T2 WHERE Y = B AND Z = VAL INTO RS2
END LOOP
RETURN ASSEMBLED RS2
有人可以指出我可以继续工作的工作骨架,顺便说一下。我需要从文档中获得哪些相关部分?我想我需要:
RETURNS TABLE () AS
声明结果集
CURSOR
使用第一个查询的结果循环第二个查询
答案 0 :(得分:0)
尝试使用Common Table Expressions而不是尝试使用pgpsql代码在行上显式迭代:
with T1_vals as (
select val from T1 where X = A
), T2_vals as (
select T2.val from T2, T1_vals where T2.Z = T1_vals.val and T2.Y = B
) select val from T2_vals;
作为一般规则:当您想要明确地对值进行迭代时要小心,因为SQL通常提供了性能更好的简化解决方案。
答案 1 :(得分:0)