濮阳杆衣贸易有限公司

主頁 > 知識(shí)庫 > Oracle 存儲(chǔ)過程教程

Oracle 存儲(chǔ)過程教程

熱門標(biāo)簽:貴陽智能電銷機(jī)器人官網(wǎng) 地圖標(biāo)注付款了怎么找不到了 北京營銷外呼系統(tǒng)廠家 百度地圖標(biāo)注員是干什么 外呼系統(tǒng)鄭州 外呼系統(tǒng)口號(hào) 溫州人工外呼系統(tǒng) 沈陽400電話是如何辦理 北京外呼系統(tǒng)公司排名
Oracle分頁存儲(chǔ)過程的思路于sqlserver的思路是一樣的,但是我這里做了點(diǎn)改動(dòng),在因?yàn)镺racle的語法和規(guī)則的不同所以,Oracle分頁存儲(chǔ)過程看上去有點(diǎn)不一樣。見笑,見笑!
在Oracle的存儲(chǔ)過程中返回記錄集,需要用到游標(biāo)變量,Oracle不能像sqlserver那樣可以直接返回一個(gè)記錄集。
由于設(shè)想在.net中把復(fù)雜的sql語句生成,所以在存儲(chǔ)過程中沒有去考慮生成sql語句的問題。
以下是在Oracle中實(shí)現(xiàn)的分頁存儲(chǔ)過程。
復(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, --分頁索引
Psql in varchar2, --產(chǎn)生dataset的sql語句
Psize in number, --頁面大小
Pcount out number, --返回分頁總數(shù)
v_cur out type_cur --返回當(dāng)前頁數(shù)據(jù)記錄
);
procedure DotNetPageRecordsCount(
Psqlcount in varchar2, --產(chǎn)生dataset的sql語句
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
------------------------------------------------------------取分頁總數(shù)
v_sql := 'select count(*) from (' || Psql || ')';
execute immediate v_sql into v_count;
Pcount := ceil(v_count/Psize);
------------------------------------------------------------顯示任意頁內(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分頁存儲(chǔ)過程的步驟。
在.net調(diào)用返回記錄集的存儲(chǔ)過程,需要用到datareader,但是datareader不支持在datagrid中的分頁,因此需要利用datagrid自定義分頁功能。
復(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ì)頁數(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
您可能感興趣的文章:
  • oracle分頁存儲(chǔ)過程 oracle存儲(chǔ)過程實(shí)例
  • java調(diào)用Oracle存儲(chǔ)過程的方法實(shí)例
  • Oracle存儲(chǔ)過程基本語法介紹
  • oracle 存儲(chǔ)過程和函數(shù)例子
  • Oracle 存儲(chǔ)過程總結(jié) 二、字符串處理相關(guān)函數(shù)
  • Oracle 存儲(chǔ)過程總結(jié)(一、基本應(yīng)用)
  • oracle 存儲(chǔ)過程詳細(xì)介紹(創(chuàng)建,刪除存儲(chǔ)過程,參數(shù)傳遞等)

標(biāo)簽:溫州 衢州 通遼 潮州 包頭 淮北 定西 衡水

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Oracle 存儲(chǔ)過程教程》,本文關(guān)鍵詞  Oracle,存儲(chǔ),過程,教程,Oracle,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Oracle 存儲(chǔ)過程教程》相關(guān)的同類信息!
  • 本頁收集關(guān)于Oracle 存儲(chǔ)過程教程的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    德昌县| 冀州市| 喀喇| 新巴尔虎左旗| 慈利县| 周至县| 濮阳县| 古田县| 唐山市| 潞西市| 湖南省| 江源县| 资兴市| 河西区| 滨州市| 正蓝旗| 鄄城县| 礼泉县| 精河县| 连江县| 宝应县| 兰溪市| 武乡县| 高邑县| 集贤县| 鄂伦春自治旗| 会同县| 定陶县| 任丘市| 莫力| 灌阳县| 陕西省| 平阳县| 班戈县| 连平县| 莱州市| 凌云县| 元谋县| 奇台县| 承德市| 沈阳市|