麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁(yè) > 數(shù)據(jù)庫(kù) > Oracle > 正文

Oracle 存儲(chǔ)過(guò)程教程

2024-08-29 13:56:04
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
Oracle分頁(yè)存儲(chǔ)過(guò)程的思路于sqlserver的思路是一樣的,但是我這里做了點(diǎn)改動(dòng),在因?yàn)镺racle的語(yǔ)法和規(guī)則的不同所以,Oracle分頁(yè)存儲(chǔ)過(guò)程看上去有點(diǎn)不一樣。見(jiàn)笑,見(jiàn)笑!
在Oracle的存儲(chǔ)過(guò)程中返回記錄集,需要用到游標(biāo)變量,Oracle不能像sqlserver那樣可以直接返回一個(gè)記錄集。
由于設(shè)想在.net中把復(fù)雜的sql語(yǔ)句生成,所以在存儲(chǔ)過(guò)程中沒(méi)有去考慮生成sql語(yǔ)句的問(wèn)題。
以下是在Oracle中實(shí)現(xiàn)的分頁(yè)存儲(chǔ)過(guò)程。

復(fù)制代碼 代碼如下:


create or replace package DotNet is
-- Author : good_hy
-- Created : 2004-12-13 13:30:30
-- Purpose :
TYPE type_cur IS REF CURSOR; --定義游標(biāo)變量用于返回記錄集
PROCEDURE DotNetPagination(
Pindex in number, --分頁(yè)索引
Psql in varchar2, --產(chǎn)生dataset的sql語(yǔ)句
Psize in number, --頁(yè)面大小
Pcount out number, --返回分頁(yè)總數(shù)
v_cur out type_cur --返回當(dāng)前頁(yè)數(shù)據(jù)記錄
);
procedure DotNetPageRecordsCount(
Psqlcount in varchar2, --產(chǎn)生dataset的sql語(yǔ)句
Prcount out number --返回記錄總數(shù)
);
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
------------------------------------------------------------取分頁(yè)總數(shù)
v_sql := 'select count(*) from (' || Psql || ')';
execute immediate v_sql into v_count;
Pcount := ceil(v_count/Psize);
------------------------------------------------------------顯示任意頁(yè)內(nèi)容
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; --返回記錄總數(shù)
end DotNetPageRecordsCount;
--**************************************************************************************
end DotNot;


以下是在.net中調(diào)用Oracle分頁(yè)存儲(chǔ)過(guò)程的步驟。
在.net調(diào)用返回記錄集的存儲(chǔ)過(guò)程,需要用到datareader,但是datareader不支持在datagrid中的分頁(yè),因此需要利用datagrid自定義分頁(yè)功能。

復(fù)制代碼 代碼如下:


rotected WithEvents DataGrid1 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 = 10)
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.DataGrid1.AllowPaging = True
Me.DataGrid1.AllowCustomPaging = True
Me.DataGrid1.PageSize = psize
Me.DataGrid1.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.DataGrid1.DataSource = dr
Me.DataGrid1.DataBind()
dr.Close()
conn.Close()
Response.Write("總計(jì)頁(yè)數(shù) " & 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(0, psql, 20)
End If
End Sub
---------------------------------------------------------------------------------------
Private Sub DataGrid1_PageIndexChanged(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridPageChangedEventArgs) Handles DataGrid1.PageIndexChanged
Dim psql As String = "select rownum rn,t.* from cd_ssxl t"
Me.DataGrid1.CurrentPageIndex = e.NewPageIndex
gridbind(e.NewPageIndex, psql, 20)
End Sub

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 成人黄色小视频网站 | 欧美a级一区二区 | 黄色毛片18| xxxx69hd一hd72 | 一区二区三区视频在线播放 | 久久综合婷婷 | 国产毛片视频 | 一级黄色毛片子 | 男人天堂新地址 | 久久久久久久久久久久久久av | 久久色网站 | 九九综合九九 | 国产一区视频在线观看免费 | 中文字幕激情视频 | 国产精品视频二区不卡 | 性aaa| 免费人成在线播放 | 免费观看一级黄色片 | 成年免费视频黄网站在线观看 | 在线看一级片 | 亚洲极色| 一本一本久久a久久精品综合小说 | 久艹在线视频 | 中文字幕在线永久 | 欧美成人黄色小视频 | 成人短视频在线观看免费 | 国产精品久久久久久影院8一贰佰 | 国产精品久久久久久久久久久天堂 | 一区二区精品视频 | 国产精品野外av久久久 | 欧美一级毛片欧美一级成人毛片 | 久久艹艹艹 | 精品国产一区二区三区四区阿崩 | 精品一区二区三区免费爱 | 午夜伦情电午夜伦情电影 | 一级黄色毛片播放 | av电影在线免费 | 国产在线免 | 一级做受大片免费视频 | 嫩呦国产一区二区三区av | 涩涩伊人 |