2

我正在编写一个 PL/PGSQL 函数。它涉及处理查询的结果。文档中的 IIRCSELECT INTO在这种情况下不起作用,但是,可以通过创建临时表来存储查询结果。

我运行以下快速测试:

create function foo() returns numeric as $body$ 
begin 
  create temporary table footable as 
  select * from some_table; 

  return 1.23; 
end; 
$body$ language plpgsql;

然后我运行测试它如下:

select * from foo();
1.23
select * from foo();
ERROR:  relation "footable" already exists
CONTEXT:  SQL statement "create temporary table footable as select * from 
          some_table"
PL/pgSQL function "foo" line 1 at SQL statement

那么,如何将查询结果临时缓存在变量中,以便稍后在我的存储过程中使用?

我正在使用 PG 8.4。

4

2 回答 2

2

临时表在当前会话(不是事务)结束时被销毁。您可以通过修改CREATE语句使其在提交/回滚后消失:

CREATE TEMPORARY TABLE footable ... ON COMMIT DROP;

当然,您不能在每个事务CREATE中多次运行它,因为它会给您带来 错误。relation "footable" already exists

于 2012-07-18T07:57:38.157 回答
2

还有更多方法 - 通常最好的方法是每个会话只创建一次临时表,请参阅

于 2012-07-18T09:16:17.767 回答