WEB开发网
开发学院数据库Oracle 一个简单的oracle分页存储过程的实现和调用 阅读

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

 2007-05-13 12:30:32 来源:WEB开发网   
核心提示:在看了众多的分页存储过程以后发现都是针对sqlserver的,而没有oracle的,一个简单的oracle分页存储过程的实现和调用,因此想写一个关于oracle的存储过程,因为我用到的数据库是oracle.---oracle分页存储过程的思路于sqlserver的思路是一样的,所以在存储过程中没有去考虑生成sql语句的

在看了众多的分页存储过程以后发现都是针对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;
 
End DotNetPagination;
--**************************************************************************************
procedure DotNetPageRecordsCount(
  Psqlcount in varchar2,
  Prcount  out number
  )
  as
 
  v_sql varchar2(1000);
  v_prcount number;
 
  begin
 
  v_sql := 'select count(*) from (' || Psqlcount || ')';
  execute immediate v_sql into v_prcount;
  Prcount := v_prcount;         --返回记录总数                           
 
  end DotNetPageRecordsCount;
 
--**************************************************************************************
end DotNot;
  ------------------------------------------------------------------------------------------

以下是在.net中调用oracle分页存储过程的步骤。(vb.net)

1 2  下一页

Tags:一个 简单 oracle

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接