一个简单的oracle分页存储过程的实现和调用_Oracle数据库_黑客防线网安服务器维护基地--Powered by WWW.RONGSEN.COM.CN

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

作者:黑客防线网安Oracle维护基地 来源:黑客防线网安Oracle维护基地 浏览次数:0

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

在看了众多的分页存储过程以后发现都是针对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 := 'select 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 := 'select rownum rn,t.* from cd_ssxl t' ;      --要求必须包含rownum字段
  v_sql := 'select * from (' || Psql || ') where rn between ' || v_Plow || ' and ' || v_Phei ;
  open v_cur for v_sql;
 

    黑客防线网安服务器维护方案本篇连接:http://www.rongsen.com.cn/show-12812-1.html
网站维护教程更新时间:2012-03-23 00:46:13  【打印此页】  【关闭
我要申请本站N点 | 黑客防线官网 |  
专业服务器维护及网站维护手工安全搭建环境,网站安全加固服务。黑客防线网安服务器维护基地招商进行中!QQ:29769479

footer  footer  footer  footer