CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Oracle >  开发

Orancle下的动态游标实现(总结)

楼主rickywei(蓝火)2003-12-03 18:50:54 在 Oracle / 开发 提问

不少朋友在开发过程中,要使用到游标进行统计(不用临时表)并返回统计结果,但游标后面的SQL却是动态的,如select   *   from   tablename   where   ?   order   ?."?"代表条件,这样该如何处理呢。在同事的帮助下我实践了一下。总结出来。  
   
  假设tablename表中有field如下:  
      field1   varchar2(50)  
      field2   Varchar2(50)  
      field3   Varchar(50)  
      field4   varchar2(50)  
      field5   varchar2(20)  
      field6   float,  
      field7   float  
   
  1.定义游标  
  create   or   replace   package   RefCursor   is  
   
      --   Author     :   Ricky  
      --   Created   :   2003-9-1   14:08:45  
      --   Purpose   :    
      --   Public   type   declarations  
      type   t_RefCursor   is   ref   cursor;  
  end   RefCursor;  
   
  2.创建类型  
  创建的类型与tablename中表的fields一致,当然也要看你实际是否要统计所有的fields.  
   
  create   or   replace   type   TableType   as   object  
  (  
      --   Author     :   Ricky  
      --   Created   :   2003-8-25   9:12:08  
      --   Purpose   :  
      --   Attributes  
   
      field1   varchar2(50),  
      field2   Varchar2(50),  
      field3   Varchar(50),  
      field4   varchar2(50),  
      field5   varchar2(20),  
      field6   float,  
      field7   float  
  );  
   
  3.创建表类型  
  create   or   replace   type   TableTypeList   as   table   of   TableType;  
   
  4.在存储过程或者函数中使用,下面在函数中使用(存储过程中不能用return一个表结构,要用到临时表)  
   
  CREATE   OR   REPLACE   FUNCTION   "TEST"   (  
   
  return   TableTypeList   pipelined   as  
   
  begin  
      v_Cur   RefCursor.t_Refcursor;  
      v_SQLStatement     string(10000);  
      v_Table   tablename%rowtype;  
   
      tmp1   tablename.field1%Type;  
      tmp2   tablename.field2%Type;  
      tmp3   tablename.field3%Type;  
      tmp4   tablename.field4%Type;  
      tmp5   tablename.field5%Type;  
      tmp6   tablename.field6%Type;  
      tmp7   tablename.field6%Type;  
   
      v_SQLStatement   :=   'Select   *   From   tablename   where   field1='1'   order   by   field1';  
   
      open   v_Cur   for   v_SQLStatement;  
      loop  
          --这里是循环过程  
          fetch   v_Cur   into   v_Comm;  
          exit   when   v_CommCur%notfound;  
   
          --这里是你要处理的统计过程,中间的过程我没有做统计,各位在实践中按需要自己添加。  
          field1   =   v_Cur.field1;  
          field2   =   v_Cur.field2;  
          field3   =   v_Cur.field3;  
          field4   =   v_Cur.field4;  
          field5   =   v_Cur.field5;  
          field6   =   v_Cur.field6;  
          field7   =   v_Cur.field7;  
   
          v_Table   =   TableType(field1,  
          field2,  
          field3,  
          field4,  
          field5,  
          field6,  
          field7)  
   
          pipe   row(v_Table);  
      end   loop  
  end;  
   
   
  问题点数:0、回复次数:0Top

相关问题

  • 动态游标问题。。。。
  • 游标的动态执行
  • 动态游标问题
  • 这样的动态游标怎么写?
  • 关于动态游标的问题
  • 能不能创建动态已游标
  • 如何在sqlserver里使用动态游标
  • 能否用动态SQL语句给游标负值?
  • 采用动态游标的问题!!!急!!急!!
  • 如何动态的定义一个游标

关键词

  • 游标
  • field
  • tabletype
  • cur
  • refcursor
  • varchar
  • 表
  • 创建
  • 类型
  • tablename

得分解答快速导航

  • 帖主:rickywei

相关链接

  • Oracle类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo