初学pgsql研究了不少帖子,觉得在pgsql 中使用函数返回集合简直太麻烦了。如果返回类型为record,那么调用的时候得给所有字段定义类型,这个,好烦人。如果直接以现成的表作为返回类型,倒是省了提供字段类型,但我的存储过程一般都用来返回一些复杂集成搜索的结果,不可能所有字段都存在于某一张表内。难道只有通过创建临时表,然后将搜索结果写入临时表,并将表名作为函数返回值传递回去,在程序中去读取临时表么??这种方法实在觉得很土。网上pgsql的资料不多,pgsql8.1的文档也没这方面的详细描述。只好来csdn碰运气了,望大虾赐教。

解决方案 »

  1.   

    如果你返回结果的结构是相对固定的话,可以先定义一个TYPE,然后再返回该类型。DEMO:
    CREATE TYPE personinfo_type AS
       (id varchar,
        fname varchar,
        lname varchar,
        age int4);CREATE OR REPLACE FUNCTION ge_all_info(company_id int4)
    RETURNS SETOF personinfoBTW, 其实每个表都是由一个类型所定义,在PGadmin上看的很清楚。SETOF opus_resource
      

  2.   

    LZ,其实很简单,返回一个游标就OK了,想要啥有啥