Chinaunix首页 | 论坛 | 博客
  • 博客访问: 594097
  • 博文数量: 841
  • 博客积分: 5000
  • 博客等级: 大校
  • 技术积分: 5010
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-28 10:08
文章分类

全部博文(841)

文章存档

2011年(1)

2008年(840)

我的朋友

分类:

2008-10-28 10:11:02


  1.CREATE OR REPLACE PACKAGE ROME AS
  
  AS
  TYPE RefCursor IS REF CURSOR;
  Function GetCompany(key IN char) return RefCursor;
  END;
  /
  CREATE OR REPLACE PACKAGE BODY ROME IS
  IS
  Function GetCompany(key IN char) return RefCursor
  Is
  v_temp RefCursor;
  BEGIN
  OPEN v_temp FOR
  SELECT * FROM Company WHERE com_ID =key;
  return v_temp;
  END GetCompany;
  END;
  
  2.(适用于PLSQL类型)
  
  Type shifts_ty is RECORD(
  comp_code  varchar2(10),
  SHIFT_CODE  varchar2(10),
  sft_flg    varchar2(10),
  beg_tm    number,
  end_tm    number,
  skills    varchar2(10)) ;
  Type shifts is Table of shifts_ty index by binary_integer;
  
  FUNCTION test_proc(test varchar2)
  
  return shifts is
  shiftspkg SHIFTS;  --表变量shiftspkg
  
  cursor q1 is select
  shifts.comp_code,shifts.shift_code,shifts.WRK_BEG_TM,shifts.WRK_end_TM,
  shifts.skills from str_shifts shifts where comp_code ='TSI'; --str_shifts是与表变量shiftspkg结构完全相同的真实表
  qty q1%rowtype;
  begin
  
  open q1;
  loop
  fetch q1 into qty;
  exit when q1%notfound;
  
  for iCount in 1.. qty.skills.count
  loop
  shiftspkg(icount).comp_code:= qty.comp_code;
  shiftspkg(icount).SHIFT_CODE:= qty.shift_code;
  shiftspkg(icount).sft_flg:= 'SLOTS';
  shiftspkg(icount).beg_tm:= qty.wrk_beg_tm;
  shiftspkg(icount).end_tm:= qty.wrk_end_tm;
  shiftspkg(icount).skills:= qty.skills(icount);
  end loop;
  end loop;
  return  shiftspkg;
  end;
  end;
  
  3.使用于SQL类型
  
  create or replace type myScalarType as object
  ( comp_code varchar2(10),
  shift_code varchar2(10),
  sft_flg    varchar2(10),
  beg_tm    number,
  end_tm    number,
  skills    varchar2(10)
  )
  
  create or replace type myArrayType as table of myScalarType
  
  FUNCTION test_proc(test varchar2) return myArrayType
  is
  l_data myArrayType := myArrayType() ;
  begin
  for i in 1 .. 5
  loop
  l_data.extend;
  l_data( l_data.count ) := myScalarType( 'cc-'||i,
  'sc-'||i,
  'flg-'||i,
  i,
  i,
  test||i );
  end loop;
  
  return l_data;
  end;
  
  end;
  
  select *
  from THE ( select cast( pkg_test.test_proc('hello') as myArrayType )
  from dual ) a
  或
  select *
  from table ( cast( my_function() as mytabletype  ) )
  order by seq
【责编:admin】

--------------------next---------------------

阅读(292) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~