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

时间:2021-04-06 12:15:24
在 sqlserver 中有两种方式 在存储过程中创建临时表

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

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

在postgresql 中有没有类似的方法创建临时表?
最好有 完整代码事例(我刚接触PG 很多基本语法不清楚) 
有文档质料的具体地址也好
谢谢大家!!!
 

7 个解决方案

#1


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);

#2


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;

#3


谢谢 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;

该如何实现???

#4


谢谢大家的解答: 让我知道有很多新鲜的东西值得关注。。。
不给分的原因: 当我在网上找东西的时候 对得分的回复特别关注 如果得分回复与提出的问题不一致 可能会误导寻找答案的人。。。!

本题正解之一:

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;

#5


貌似xxxswl的方法不对,能否给出正确的代码,谢谢,急用

#6


http://www.java2s.com/Code/PostgreSQL/Table/Createatemporarytable.htm

#7


http://www.java2s.com/Code/PostgreSQL/Table/Createatemporarytable.htm

#1


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);

#2


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;

#3


谢谢 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;

该如何实现???

#4


谢谢大家的解答: 让我知道有很多新鲜的东西值得关注。。。
不给分的原因: 当我在网上找东西的时候 对得分的回复特别关注 如果得分回复与提出的问题不一致 可能会误导寻找答案的人。。。!

本题正解之一:

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;

#5


貌似xxxswl的方法不对,能否给出正确的代码,谢谢,急用

#6


http://www.java2s.com/Code/PostgreSQL/Table/Createatemporarytable.htm

#7


http://www.java2s.com/Code/PostgreSQL/Table/Createatemporarytable.htm