Asp Oracle存儲(chǔ)過(guò)程返回結(jié)果集的代碼
更新時(shí)間:2008年11月08日 20:19:23 作者:
對(duì)于 Oracle 這個(gè)龐然大物,Asp使用起來(lái),確實(shí)是捉襟見(jiàn)肘的 。
尤其是要返回結(jié)果集(Recordset)的情況,更是讓很多人犯難。
經(jīng)過(guò)摸索和實(shí)踐,我把自己的解決方法,寫在下面:
說(shuō)明:
我的Oracle客戶端的版本是 oracle 9i, 安裝client端的時(shí)候,不能用默認(rèn)安裝,一定要自定義, 然后選擇所有 OLEDB 相關(guān)的內(nèi)容,都裝上,否則到下面的 Provider 的時(shí)候,會(huì)找不到。
<%@Language="VBSCRIPT" CodePage="936" LCID="2052"%>
<%Option Explicit%>
<!-- #include file="../adovbs.inc" -->
<%
Dim cnOra
Function Connect2OracleServer
Dim conStr
conStr = "Provider=MSDAORA.Oracle;Data Source=xx;User Id=?;Password=?"
Set cnOra = Server.CreateObject("ADODB.Connection")
cnOra.CursorLocation = adUseClient '=3
On Error Resume Next
cnOra.Open conStr
Connect2OracleServer = (Err.Number = 0)
End Function
Sub DisconnectFromOracleServer
If Not cnOra is Nothing Then
If cnOra.State = 1 Then
cnOra.Close
End If
Set cnOra = Nothing
End If
End Sub
Sub Echo(str)
Response.Write(str)
End Sub
Sub OutputResult
Dim cmdOra
Dim rs
Set cmdOra = Server.CreateObject("ADODB.Command")
With cmdOra
.CommandType = adCmdText '=1
.CommandText = "{call PKG_TEST.GetItem(?,?)}"
.Parameters.Append cmdOra.CreateParameter("p1", adNumeric, adParamInput, 10, 1)
.Parameters.Append cmdOra.CreateParameter("p2", adVarChar, adParamInput, 10, "xx")
.ActiveConnection = cnOra
Set rs = cmdOra.Execute
If Not rs.Eof Then
While Not rs.Eof
Echo rs(0)
Echo "--"
Echo rs(1)
Echo "<br>"
rs.MoveNext
Wend
rs.Close
End If
Set rs = Nothing
Set cmdOra = Nothing
End With
DisconnectFromOracleServer
End Sub
If Connect2OracleServer Then
OutputResult
Else
Response.Write(Err.Description)
End If
%>
下面是 Oracle 的 sql 腳本
--------------------------------------SQL Script----------------------------------
--建包-----------------------------------
Create Or Replace Package PKG_TEST
IS
TYPE rfcTest IS REF CURSOR ;
PROCEDURE GETITEM
( p1 IN NUMBER,
p2 IN VARCHAR2,
p3 OUT rfcTest
);
END; -- Package Specification PKG_TEST
---------------------------------------------------
--建包體-----------------------------------
Create Or Replace Package Body PKG_TEST
IS
PROCEDURE GETITEM
( p1 IN NUMBER,
p2 IN VARCHAR2,
p3 OUT rfcTest
)
IS
BEGIN
OPEN p3 FOR
SELECT * FROM tablename WHERE id = p1 AND name=p2 AND rownum < 10 ;
EXCEPTION
WHEN OTHERS THEN
NULL ;
END;
END; -- Package Body PKG_TEST
說(shuō)明:
我的Oracle客戶端的版本是 oracle 9i, 安裝client端的時(shí)候,不能用默認(rèn)安裝,一定要自定義, 然后選擇所有 OLEDB 相關(guān)的內(nèi)容,都裝上,否則到下面的 Provider 的時(shí)候,會(huì)找不到。
復(fù)制代碼 代碼如下:
<%@Language="VBSCRIPT" CodePage="936" LCID="2052"%>
<%Option Explicit%>
<!-- #include file="../adovbs.inc" -->
<%
Dim cnOra
Function Connect2OracleServer
Dim conStr
conStr = "Provider=MSDAORA.Oracle;Data Source=xx;User Id=?;Password=?"
Set cnOra = Server.CreateObject("ADODB.Connection")
cnOra.CursorLocation = adUseClient '=3
On Error Resume Next
cnOra.Open conStr
Connect2OracleServer = (Err.Number = 0)
End Function
Sub DisconnectFromOracleServer
If Not cnOra is Nothing Then
If cnOra.State = 1 Then
cnOra.Close
End If
Set cnOra = Nothing
End If
End Sub
Sub Echo(str)
Response.Write(str)
End Sub
Sub OutputResult
Dim cmdOra
Dim rs
Set cmdOra = Server.CreateObject("ADODB.Command")
With cmdOra
.CommandType = adCmdText '=1
.CommandText = "{call PKG_TEST.GetItem(?,?)}"
.Parameters.Append cmdOra.CreateParameter("p1", adNumeric, adParamInput, 10, 1)
.Parameters.Append cmdOra.CreateParameter("p2", adVarChar, adParamInput, 10, "xx")
.ActiveConnection = cnOra
Set rs = cmdOra.Execute
If Not rs.Eof Then
While Not rs.Eof
Echo rs(0)
Echo "--"
Echo rs(1)
Echo "<br>"
rs.MoveNext
Wend
rs.Close
End If
Set rs = Nothing
Set cmdOra = Nothing
End With
DisconnectFromOracleServer
End Sub
If Connect2OracleServer Then
OutputResult
Else
Response.Write(Err.Description)
End If
%>
下面是 Oracle 的 sql 腳本
--------------------------------------SQL Script----------------------------------
--建包-----------------------------------
復(fù)制代碼 代碼如下:
Create Or Replace Package PKG_TEST
IS
TYPE rfcTest IS REF CURSOR ;
PROCEDURE GETITEM
( p1 IN NUMBER,
p2 IN VARCHAR2,
p3 OUT rfcTest
);
END; -- Package Specification PKG_TEST
---------------------------------------------------
--建包體-----------------------------------
Create Or Replace Package Body PKG_TEST
IS
PROCEDURE GETITEM
( p1 IN NUMBER,
p2 IN VARCHAR2,
p3 OUT rfcTest
)
IS
BEGIN
OPEN p3 FOR
SELECT * FROM tablename WHERE id = p1 AND name=p2 AND rownum < 10 ;
EXCEPTION
WHEN OTHERS THEN
NULL ;
END;
END; -- Package Body PKG_TEST
相關(guān)文章
asp 在線備份與恢復(fù)sqlserver數(shù)據(jù)庫(kù)的代碼
asp 在線備份 恢復(fù) sql server 數(shù)據(jù)庫(kù),對(duì)于遠(yuǎn)程沒(méi)有提供sqlserver遠(yuǎn)程連接或打包下載的朋友是個(gè)臨時(shí)解決方法,對(duì)于大數(shù)據(jù)來(lái)說(shuō)可能效果不好。2010-07-07
ASP在SQL Server 2000中新建帳號(hào)和權(quán)限
ASP在SQL Server 2000中新建帳號(hào)和權(quán)限...2006-08-08
用SQL批量插入數(shù)據(jù)的存儲(chǔ)過(guò)程
用SQL批量插入數(shù)據(jù)的存儲(chǔ)過(guò)程,需要的朋友可以參考下。2011-03-03
用Asp備份與恢復(fù)SQL Server 數(shù)據(jù)庫(kù)
用Asp備份與恢復(fù)SQL Server 數(shù)據(jù)庫(kù)...2006-08-08
使用 Osql 工具管理 SQL Server 桌面引擎 (MSDE 2000)應(yīng)用介紹
SQL Server 桌面引擎(也叫 MSDE 2000)沒(méi)有自己的用戶界面,因?yàn)樗饕O(shè)計(jì)為在后臺(tái)運(yùn)行2012-11-11
asp獲取數(shù)據(jù)庫(kù)中表名和字段名的代碼
今天冒出來(lái)一個(gè)想法,在僅知道數(shù)據(jù)庫(kù)名的情況下,用asp得到數(shù)據(jù)庫(kù)中的所有表名、所有表的字段名、以及所有字段中的內(nèi)容。經(jīng)過(guò)一段時(shí)間查詢資料和修改,終于做出來(lái)了,現(xiàn)在與大家分享。2008-09-09
SQL Server--怎樣用ADO在SQL SERVER中建庫(kù),建表
SQL Server--怎樣用ADO在SQL SERVER中建庫(kù),建表...2006-08-08
Asp Oracle存儲(chǔ)過(guò)程返回結(jié)果集的代碼
對(duì)于 Oracle 這個(gè)龐然大物,Asp使用起來(lái),確實(shí)是捉襟見(jiàn)肘的 。 尤其是要返回結(jié)果集(Recordset)的情況,更是讓很多人犯難。2008-11-11

