一个简单的oracle分页存储过程的实现和调用

文章作者 100test 发表时间 2007:09:15 12:48:13
来源 100Test.Com百考试题网


在看了众多的分页存储过程以后发现都是针对sqlserver的,而没有oracle的,因此想写一个关于oracle的存储过程,因为我用到的数据库是oracle.
---------------------------------------------------------------------------------------

oracle分页存储过程的思路于sqlserver的思路是一样的,但是我这里做了点改动,在因为oracle的语法和规则的不同所以,oracle分页
存储过程看上去有点不一样。见笑,见笑!

在oracle的存储过程中返回记录集,需要用到游标变量,oracle不能像sqlserver那样可以直接返回一个记录集。
由于设想在.net中把复杂的sql语句生成,所以在存储过程中没有去考虑生成sql语句的问题。
-----------------------------------------------------------------------------------
以下是在oracle中实现的分页存储过程。

create or replace package DotNet is

-- Author : good_hy
-- Created : 2004-12-13 13:30:30
-- Purpose :

TYPE type_cur IS REF CURSOR. --定义游标变量用于返回记录集

PROCEDURE DotNetPagination(
Pindex in number, --分页索引
Psql in varchar2, --产生dataset的sql语句
Psize in number, --页面大小
Pcount out number, --返回分页总数
v_cur out type_cur --返回当前页数据记录
).

procedure DotNetPageRecordsCount(
Psqlcount in varchar2, --产生dataset的sql语句
Prcount out number --返回记录总数
).

end DotNot.

-------------------------------------------------------------------------------

create or replace package body DotNet is

--***************************************************************************************

PROCEDURE DotNetPagination(
Pindex in number,
Psql in varchar2,
Psize in number,
Pcount out number,
v_cur out type_cur
)
AS

v_sql VARCHAR2(1000).
v_count number.
v_Plow number.
v_Phei number.
Begin
------------------------------------------------------------取分页总数
v_sql := 0select count(*) from ( || Psql || ).
execute immediate v_sql into v_count.
Pcount := ceil(v_count/Psize).
------------------------------------------------------------显示任意页内容
v_Phei := Pindex * Psize Psize.
v_Plow := v_Phei - Psize 1.
--Psql := 0select rownum rn,t.* from cd_ssxl t . --要求必须包含rownum字段
v_sql := 0select * from ( || Psql || ) where rn between || v_Plow || and || v_Phei .

open v_cur for v_sql.

End DotNetPagination.

--**************************************************************************************

procedure DotNetPageRecordsCount(
Psqlcount in varchar2,
Prcount out number
)
as



相关文章


C#中使用Oracle存储过程笔记
将图片文存储到Oracle的存储过程
ring调用ORACLE存储过程的结果集
Move系统表DEPENDENCY$导致索引失效的数据库故障
一个简单的oracle分页存储过程的实现和调用
轻松接触Oracle数据库中的Killse ion
利用Oracle解析函数快速检查序列间隙
检查管理Oracle10g数据库URL
QuestPerformanceAnalysis工具介绍
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛