知识大全 一个简单的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

相关参考