a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 數據庫 > Oracle > 正文

Oracle 存儲過程教程

2024-08-29 13:56:04
字體:
來源:轉載
供稿:網友
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分頁存儲過程的步驟。
在.net調用返回記錄集的存儲過程,需要用到datareader,但是datareader不支持在datagrid中的分頁,因此需要利用datagrid自定義分頁功能。

復制代碼 代碼如下:


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("總計頁數 " & 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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 日本一区二区高清不卡 | 日本欧美视频 | 亚洲免费成人 | 亚洲欧美日韩另类一区二区 | 欧美爆操 | 欧美日韩精品一区 | 色伊人网| 亚洲精品a | 午夜在线一区 | 国产一区二区精品在线观看 | 欧美一级一区 | 久久亚洲精品中文字幕蜜潮电影 | а天堂中文最新一区二区三区 | 欧美福利| 四虎成人永久 | 精品在线免费观看视频 | 亚洲免费资源 | 日本一区二区不卡视频 | 99精品国产高清在线观看 | av毛片免费| 天堂久久久久 | 日韩中文字幕在线免费 | 欧美成人一区二区三区片免费 | 欧美自拍视频 | 91精品久久久久久久久久 | 色噜噜精品 | 精品色区 | 久一精品 | 国产精品视频免费 | 黄色国产精品 | 国产美女黄色片 | 成人欧美一区二区三区1314 | 日韩电影免费在线 | 精品日韩| 国产精品久久久久久久午夜片 | 亚洲www永久成人夜色 | 青草视频在线 | 精品福利在线观看 | 国产伦精品一区二区三区不卡视频 | 日韩亚洲一区二区 | 国产中文在线 |