从表变量中选择

时间:2013-07-26 05:40:01

标签: postgresql plpgsql postgresql-9.2

我试图保存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。

1 个答案:

答案 0 :(得分:11)

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

改为使用temporary table

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 like described in the manual here中使用游标