我试图保存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。
答案 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中使用游标。