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);
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 的回复 但还不是我想要的 说的再具体点 我需要一个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);beginreturn query select myid,myage into temptable1 from (select * from "MyTable");end;$BODY$ LANGUAGE 'plpgsql' VOLATILE ALTER FUNCTION getfoo() OWNER TO postgres;该如何实现???
谢谢大家的解答: 让我知道有很多新鲜的东西值得关注 不给分的原因: 当我在网上找东西的时候 对得分的回复特别关注 如果得分回复与提出的问题不一致 可能会误导寻找答案的人!本题正解之一:CREATE OR REPLACE FUNCTION temptable() RETURNS SETOF record AS $BODY$begincreate 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;
AS $$ SELECT $1, CAST($1 AS text) || ' is text' $$
LANGUAGE SQL;SELECT * FROM dup(42);
-- 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;
我需要一个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);beginreturn query select myid,myage into temptable1 from (select * from "MyTable");end;$BODY$
LANGUAGE 'plpgsql' VOLATILE
ALTER FUNCTION getfoo() OWNER TO postgres;该如何实现???
不给分的原因: 当我在网上找东西的时候 对得分的回复特别关注 如果得分回复与提出的问题不一致 可能会误导寻找答案的人!本题正解之一:CREATE OR REPLACE FUNCTION temptable()
RETURNS SETOF record AS
$BODY$begincreate 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;