在开发过程的中,我们经常要用到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;
 
以上的相关内容就是对Oracle游标动态形式的实现的介绍,望你能有所收获。
                网页名称:实现Oracle游标的动态形式讲解
                
                标题URL:http://www.csdahua.cn/qtweb/news34/389884.html
            
网站建设、网络推广公司-快上网,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 快上网