sql 定义如下:

 create   FUNCTION   [Bill_Stat_test](@starDate char(10),@endDate char(10))  
 RETURNS   table
 AS
 RETURN  --查询内容
 (
select trade_code_b,GJ_COLLECTION_HEAD.APP_PERSON,Biz_type,num
 from  GJ_COLLECTION_HEAD
--当然这里可以加日期限制
 )
 
调用
 SELECT *
 FROM Bill_Stat_test('1999-01-01','2009-01-01')


Orale里面实现如下:

(1) 创建types 结构定义为OBJECT
CREATE OR REPLACE TYPE Bill_Stat_Type AS OBJECT
       (trade_code_b         VARCHAR2(50),
        APP_PERSON    VARCHAR2(200),
        Biz_type      VARCHAR2(100),
        num    integer)
       
(2)对类型进行说明 OBJECT是Table类型
CREATE OR REPLACE TYPE bill_stat_table AS TABLE OF Bill_Stat_Type

(3)
create or replace function Bill_Stat(P_starDate in VARCHAR2,
                                     P_endDate  in VARCHAR2)
  return bill_stat_table
is
  cursor Cur_sql is
select trade_code_b,GJ_COLLECTION_HEAD.APP_PERSON,Biz_type,num
 from  GJ_COLLECTION_HEAD;
  c1 Cur_sql%rowtype;
Result bill_stat_table := bill_stat_table();
BEGIN
     Result := bill_stat_table();
     open Cur_sql;
     loop
      fetch Cur_sql
       into c1;
     exit when Cur_sql%notfound; 
     Result.extend;
     Result(Result.count) := Bill_Stat_Type(NULL, NULL, NULL, NULL); 
     Result(Result.count).trade_code_b := c1.trade_code_b;
     Result(Result.count).trade_name := c1.trade_name; 
     Result(Result.count).Biz_type := c1.biz_type; 
     Result(Result.count).num := c1.num; 
     end loop;
    close Cur_sql;
    return(Result);
end Bill_Stat;
(4)Oracle调用如下:
 select *
 from table(cast(bill_stat('1999-01-01','2009-01-01') as bill_stat_table));