从表变量中选择

Xin*_*Xin 4 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
Run Code Online (Sandbox Code Playgroud)

代码another_function(table_holder my_table)分别为:

BEGIN

  RETURN QUERY
  SELECT col FROM table_holder where id = 1;

END
Run Code Online (Sandbox Code Playgroud)

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

我正在使用PostgreSQL 9.2.

Erw*_*ter 12

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

改为使用临时表:

BEGIN

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

END
Run Code Online (Sandbox Code Playgroud)

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

CREATE TEMP TABLE table_holder ON COMMIT DROP AS
SELECT ...
Run Code Online (Sandbox Code Playgroud)

临时表对同一会话(或事务中的)中的任何其他功能自动可见.

一种替代方法是在plpgsql中使用游标,如本手册中所述.