9

我正在尝试保存SELECT查询结果,传递它,然后在另一个 PL/pgSQL 函数中重用它:

DECLARE
  table_holder my_table; --the type of table_holder is my_table;
  result text;

BEGIN
  SELECT * INTO table_holder FROM table_holder ;

  result = another_function(table_holder);  
  return result;
END

的代码another_function(table_holder my_table)分别为:

BEGIN

  RETURN QUERY
  SELECT col FROM table_holder where id = 1;

END

SELECT是否可以对变量运行查询?如果没有,有没有办法绕过这个限制?

我正在使用 PostgreSQL 9.2。

4

1 回答 1

21

plpgsql 中没有“表变量”。这就是您可以在 SQL Server 中找到的东西。

请改用临时表

BEGIN

CREATE TEMP TABLE table_holder AS
SELECT * FROM table_holder
WHERE <some condition>
ORDER BY <some expression>
;

...

END

临时表在会话的生命周期内存在。要在函数(或封闭事务)末尾自动删除它,请ON COMMIT DROP在创建语句中使用。

CREATE TEMP TABLE table_holder ON COMMIT DROP AS
SELECT ...

临时表对同一会话中的任何其他函数自动可见。

一种替代方法是在 plpgsql中使用游标

于 2013-07-26T05:55:20.093 回答