假如需要返回三个表 而这三个表结构[字段类型,个数]可能相同 也可能不同
该如何实现 最好有完整代码 及调用方法。。比如 下面是一个返回 一个表数据的完整代码CREATE OR REPLACE FUNCTION myff()
  RETURNS SETOF record AS
$BODY$
beginreturn query select *  from "MyTable";end;
$BODY$
  LANGUAGE 'plpgsql' VOLATILE
ALTER FUNCTION getfoo() OWNER TO postgres;调用方法[在查询工具中执行]
select * from "myff"() as tt(id integer,name text,pwd text);

解决方案 »

  1.   

    你可以试一下用union all 可以实现你的要求如:return query select p.product_name as name from product p
     union all select p1.type_name from product_type_1 p1; 
      

  2.   

    return query select p.product_name as name,p.type as type from product p
     union all select p1.type_name,p1.type from product_type_1 p1; 
    记住,以第一个SELECT作为别名,UNION ALL后面跟的要有相同字段,相同列数的SELECT查询才行.
      

  3.   

    谢谢 yousite1的恢复 但还不是我想要的union all 是把两个查询结果连起来 例如
    temptable
    id  name  age
    1    aa    20
    2    bb    30在函数里 
    return query select * from "temptable"
    union all
    select * from "temptable";在查询工具中执行该函数 并返回结果
    1    aa    20
    2    bb    30
    1    aa    20
    2    bb    30
    返回的依然是 一个整体表可能是我没说明白:在asp.net中 有两种集合类型可以接收 pg数据库返回的集合类型数据
    DateTable(一个表)   DateSet(若干个表)想上面哪个例子 用DateTable接收就可以
    现在如果用DateSet接收数据 那么只会有一个表

    DateSet.table.count = 1;//DateSet中只有一张表
    而我想要的是
    DateSet.table.count = 2;这样的pg函数该如何写? 返回什么类型?需要注意什么? 
      

  4.   

    问题被我解决了 asp.net 中的DateSet类型(包含多个独立表)接收postgresql中函数返回的数据 需要如下步骤1.pg 函数需要返回游标类型
    2.需要把游标的名字返回给调用者(文档里说的很详细)
    3.具体代码如下pg函数CREATE OR REPLACE FUNCTION reftext(ref1 refcursor, ref2 refcursor)
      RETURNS SETOF refcursor AS
    $BODY$
    begin
    open $1 for  select * from "userTable";
    return next $1;

    open $2 for select * from "userInfo";
    return next $2;

    end;$BODY$
      LANGUAGE 'plpgsql' VOLATILE
      COST 100
      ROWS 1000;
    ALTER FUNCTION reftext(refcursor, refcursor) OWNER TO postgres;在查询工具中调用
    select * from "reftext"('a','b');FETCH ALL FROM a;FETCH ALL FROM b;在asp.net中调用就很简单了 我不贴代码了 需要注意的是如上面的代码 PG函数应该返回2个表数据
    但当DateSet接收的时候是3个表
    即 DateSet.Table.Count == 3;
    DateSet.Table[0] {a,b}
    DateSet.Table[1] {userTable}
    DateSet.Table[2] {userInfo}
    结贴!