不少朋友在开发过程中,要使用到游标进行统计(不用临时表)并返回统计结果,但游标后面的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数据库添加 更新 游标 过程 Java Project Oracle数据库添加 更新 游标 过程 Java Project
oracle数据库的游标详述,以及各游标相关信息的具体代码示例。可以帮助初学者以及数据库管理员更好的理解和学习游标的使用和操作。
Oracle 数据库游标使用大全,自己整的,比你搜的好
Oracle数据库游标使用大全 Oracle数据库游标使用大全Oracle数据库游标使用大全
Oracle数据库的游标学习总结Oracle数据库的游标学习总结
Oracle数据库游标使用示例 Oracle数据库游标使用示例 Oracle数据库游标使用示例
Oracle数据库中游标使用研究.pdf
简单的oracle游标使用小例子~~ 一份文档,实验用的。
oracle数据库游标实验报告!oracle数据库游标实验报告!oracle数据库游标实验报告!
当查询返回结果超过一行时,就需要一个显式游标,此时用户不能使用select into语句。本文介绍了Oracle数据库游标的使用方法。
该文件讲解了Oracle数据库中函数游标的创建以及包的定义,对数据库有更深层次的了解
Oracle封锁及动态游标技术分析与应用.pdf
oracle数据库忽然连不上了,一查是游标数量超了。 1.查看游标数 show parameter open_cursors 2.修改游标数 alter system set open_cursors = 10000; 3.获取打开的游标数 select o.sid, osuser, machine, count...
Oracle数据库游标使用大全
Oracle12c数据库基础教程Oracle12c数据库游标、存储过程和触发器.pptx
NULL 博文链接:https://chaoyi.iteye.com/blog/2147398
ORACLE显式游标和动态游标的使用.pdf
oracle数据库 游标、存储过程和触发器