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

Posted 语句

篇首语:最慢的步伐不是跬步,而是徘徊;最快的脚步不是冲刺,而是坚持。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 一个简单的oracle分页存储过程的实现和调用相关的知识,希望对你有一定的参考价值。

  在看了众多的分页存储过程以后发现都是针对sqlserver的 而没有oracle的 因此想写一个关于oracle的存储过程 因为我用到的数据库是oracle oracle分页存储过程的思路于sqlserver的思路是一样的 但是我这里做了点改动 在因为oracle的语法和规则的不同所以 oracle分页存储过程看上去有点不一样 见笑 见笑!

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

  create or replace package DotNet is

   Author  : good_hy  Created : : :   Purpose :     TYPE type_cur IS REF CURSOR;     定义游标变量用于返回记录集      PROCEDURE DotNetPagination(        Pindex in number                 分页索引     Psql in varchar                 产生dataset的sql语句  Psize in number                  页面大小  Pcount out number                返回分页总数  v_cur out type_cur               返回当前页数据记录  );      procedure DotNetPageRecordsCount(  Psqlcount in varchar            产生dataset的sql语句                             Prcount   out number             返回记录总数  );  end DotNot;

  

  create or replace package body DotNet is

   ***************************************************************************************  PROCEDURE DotNetPagination(  Pindex in number   Psql in varchar   Psize in number     Pcount out number   v_cur out type_cur ) AS

  v_sql VARCHAR ( );  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 + ;  Psql := select rownum rn t * from cd_ssxl t ;            要求必须包含rownum字段  v_sql := select * from ( || Psql || ) where rn beeen || v_Plow || and || v_Phei ;

  open v_cur for v_sql;   End DotNetPagination;   **************************************************************************************  procedure DotNetPageRecordsCount(  Psqlcount in varchar   Prcount   out number  )  as     v_sql varchar ( );   v_prcount number;     begin     v_sql := select count(*) from ( || Psqlcount || ) ;   execute immediate v_sql into v_prcount;   Prcount := v_prcount;                  返回记录总数                                                           end DotNetPageRecordsCount;    ************************************************************************************** end DotNot;

   以下是中调用oracle分页存储过程的步骤 ()调用返回记录集的存储过程 需要用到datareader 但是datareader不支持在datagrid中的分页 因此需要利用datagrid自定义分页功能

  Protected WithEvents DataGrid As System Web UI WebControls DataGrid

  Dim conn As New OracleClient OracleConnection()    Dim cmd As New OracleClient OracleCommand()    Dim dr As OracleClient OracleDataReader

  Private Sub gridbind(ByVal pindex As Integer ByVal psql As String Optional ByVal psize As Integer = )

  conn ConnectionString = Password=gzdlgis;User ID=gzdlgis;Data Source=gzgis         cmd Connection = conn        cmd CommandType = CommandType StoredProcedure        conn Open()

           cmd CommandText = DotNot DotNetPageRecordsCount                 cmd Parameters Add( psqlcount OracleType VarChar) Value = psql        cmd Parameters Add( prcount OracleType Number) Direction = ParameterDirection Output

  cmd ExecuteNonQuery()

  Me DataGrid AllowPaging = True        Me DataGrid AllowCustomPaging = True        Me DataGrid PageSize = psize        Me DataGrid VirtualItemCount = cmd Parameters( prcount ) Value

  cmd Parameters Clear()                cmd CommandText = DotNot DotNetPagination                 cmd Parameters Add( pindex Data OracleClient OracleType Number) Value = pindex        cmd Parameters Add( psql Data OracleClient OracleType VarChar) Value = psql select rownum rn t * from cd_ssxl t         cmd Parameters Add( psize Data OracleClient OracleType Number) Value = psize        cmd Parameters Add( v_cur Data OracleClient OracleType Cursor) Direction = ParameterDirection Output        cmd Parameters Add( pcount Data OracleClient OracleType Number) Direction = ParameterDirection Output

  dr = cmd ExecuteReader()

  Me DataGrid DataSource = dr        Me DataGrid DataBind()

  dr Close()        conn Close()

  Response Write( 总计页数 & cmd Parameters( pcount ) Value)    End Sub

  

  Private Sub Page_Load(ByVal sender As System Object ByVal e As System EventArgs) Handles MyBase Load        If Not Page IsPostBack Then            Dim psql As String = select rownum rn t * from cd_ssxl t             gridbind( psql )                    End If

  End Sub

  

  Private Sub DataGrid _PageIndexChanged(ByVal source As Object ByVal e As System Web UI WebControls DataGridPageChangedEventArgs) Handles DataGrid PageIndexChanged        Dim psql As String = select rownum rn t * from cd_ssxl t

cha138/Article/program/Oracle/201311/17152

相关参考

知识大全 oracle分页存储过程

  createorreplacepackagemypack  as  typecursortestCursorisrefcursor;  endmypack;  tableName表名pageSiz

知识大全 oracle多条件查询分页存储过程

  项目接近尾声了感觉将业务逻辑放到oracle中使得后台代码很精简oracle很有搞头!  PL\\SQL:  createorreplaceprocedureproc_client_List客户多

知识大全 java调用oracle存储过程

  一无返回值的存储过程  存储过程为  CREATEORREPLACEPROCEDURETESTA(PARAINVARCHARPARAIN VARCHAR) 

知识大全 Ibatis调用Oracle存储过程

Ibatis调用Oracle存储过程  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  最近开始接触

知识大全 VFP中调用Oracle的存储过程

VFP中调用Oracle的存储过程  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  VFP由于其通

知识大全 Jsp中调用Oracle存储过程的小例子

Jsp中调用Oracle存储过程的小例子  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  /*执行

知识大全 调用Oracle数据库中的存储过程需要两步走

调用Oracle数据库中的存储过程需要两步走  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  存储

知识大全 使用VB调用Oracle程序包内的存储过程返回结果集

使用VB调用Oracle程序包内的存储过程返回结果集  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

知识大全 C#调用存储过程简单完整例子

C#调用存储过程简单完整例子  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  CREATEPROC

知识大全 ASP调用带参数存储过程

ASP调用带参数存储过程  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  这也是最简单的方法两个输