知识大全 一个简单的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相关参考
createorreplacepackagemypack as typecursortestCursorisrefcursor; endmypack; tableName表名pageSiz
项目接近尾声了感觉将业务逻辑放到oracle中使得后台代码很精简oracle很有搞头! PL\\SQL: createorreplaceprocedureproc_client_List客户多
一无返回值的存储过程 存储过程为 CREATEORREPLACEPROCEDURETESTA(PARAINVARCHARPARAIN VARCHAR)
Ibatis调用Oracle存储过程 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 最近开始接触
VFP中调用Oracle的存储过程 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! VFP由于其通
Jsp中调用Oracle存储过程的小例子 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! /*执行
调用Oracle数据库中的存储过程需要两步走 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 存储
知识大全 使用VB调用Oracle程序包内的存储过程返回结果集
使用VB调用Oracle程序包内的存储过程返回结果集 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
C#调用存储过程简单完整例子 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! CREATEPROC
ASP调用带参数存储过程 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 这也是最简单的方法两个输