如何在postgresql 函数中创建临时表???

xxxswl 2010-05-17 09:34:53
在 sqlserver 中有两种方式 在存储过程中创建临时表

1.declare @table1 table(id int,age int);

2.SELECT id,name INTO #Table1 FROM (select * from myTable);

在postgresql 中有没有类似的方法创建临时表?
最好有 完整代码事例(我刚接触PG 很多基本语法不清楚)
有文档质料的具体地址也好
谢谢大家!!!
...全文
3204 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
fancy_xunbei 2012-06-15
  • 打赏
  • 举报
回复
http://www.java2s.com/Code/PostgreSQL/Table/Createatemporarytable.htm
fancy_xunbei 2012-06-15
  • 打赏
  • 举报
回复
http://www.java2s.com/Code/PostgreSQL/Table/Createatemporarytable.htm
mcgre 2011-10-12
  • 打赏
  • 举报
回复
貌似xxxswl的方法不对,能否给出正确的代码,谢谢,急用
xxxswl 2010-05-18
  • 打赏
  • 举报
回复
谢谢大家的解答: 让我知道有很多新鲜的东西值得关注。。。
不给分的原因: 当我在网上找东西的时候 对得分的回复特别关注 如果得分回复与提出的问题不一致 可能会误导寻找答案的人。。。!

本题正解之一:

CREATE OR REPLACE FUNCTION temptable()
RETURNS SETOF record AS
$BODY$

begin

create temporary table "t_2" as select * from "MyTable";

return query select * from "t_2";

drop table t_2; /*这句值得关注 如果在查询工具连续执行 那么只有第一次是执行通过的 因为在同一会话中创建同名表会提示错误。*/

end;$BODY$
LANGUAGE 'plpgsql' VOLATILE
COST 100
ROWS 1000;
ALTER FUNCTION temptable() OWNER TO postgres;

xxxswl 2010-05-17
  • 打赏
  • 举报
回复
谢谢 ACMAIN_CHM 的回复 但还不是我想要的 说的再具体点
我需要一个postgresql函数 返回一个结果集合 SETOF record 类型
如有一个表中有若干字段 "MyTable" id,age,name,...... 只需要返回其中几个

我想在函数中 创建一个临时变量(临时表) 来存放结果集合 并返回这个临时表
(我的需求是固定的 不用其他方式实现!!!)

语法大意:

CREATE OR REPLACE FUNCTION getfoo()
RETURNS SETOF record AS
$BODY$

declare

declare temptable1 table(id int,age int);

begin

return query select myid,myage into temptable1 from (select * from "MyTable");

end;$BODY$
LANGUAGE 'plpgsql' VOLATILE
ALTER FUNCTION getfoo() OWNER TO postgres;

该如何实现???
wwwwb 2010-05-17
  • 打赏
  • 举报
回复
select * from aa8() a(a int,b text,c text,d text)
-- Function: aa8()

-- DROP FUNCTION aa8();

CREATE OR REPLACE FUNCTION aa8()
RETURNS SETOF record AS
$BODY$
declare
sql varchar(1000);
myrec record;
ref refcursor;
rec record;
begin
sql:='select "CustomerId" ';
for myrec in select * from "Cus_Field" loop
sql := sql || ',max(case "FieldId" when ' || myrec."FieldId" ||
' then "FieldValue" end) as ' || myrec."FieldName";
end loop ;
sql := sql || ' from "Cus_CustomerField" group by "CustomerId"';
FOR rec IN execute SQL Loop
RETURN NEXT rec;
END LOOP;

end;
$BODY$
LANGUAGE 'plpgsql' VOLATILE
COST 100
ROWS 1000;
ALTER FUNCTION aa8() OWNER TO zw;
ACMAIN_CHM 2010-05-17
  • 打赏
  • 举报
回复
CREATE FUNCTION dup(int) RETURNS TABLE(f1 int, f2 text)
AS $$ SELECT $1, CAST($1 AS text) || ' is text' $$
LANGUAGE SQL;

SELECT * FROM dup(42);

57,062

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧