第一句子网 - 唯美句子、句子迷、好句子大全
第一句子网 > VBA调用带游标返回值的ORACLE存储过程

VBA调用带游标返回值的ORACLE存储过程

时间:2021-04-20 10:54:05

相关推荐

VBA调用带游标返回值的ORACLE存储过程

【解决方案一】:

On Error GoTo 11

Dim hisCNN As ADODB.Connection

Dim hisRST As ADODB.Recordset

Dim sSQL As String

Dim iZDS As Integer

Dim sBT As String

Dim sTEMP As String

Dim hisCMD As New mand

Dim Para1 As New ADODB.Parameter

Dim Para2 As New ADODB.Parameter

Dim Para3 As New ADODB.Parameter

Set hisCNN = New ADODB.Connection

hisCNN.CursorLocation = adUseClient

hisCNN.Open "Provider=MSDASQL.1;Persist Security Info=False;User ID=i_pathology;pwd=i_pathology;Data Source=aaa"

MsgBox "连接数据库成功!"

//aaa是ODBC名

Set hisCMD.ActiveConnection = hisCNN

mandType = adCmdStoredProc

mandText = "zhi.F_get_sick_info"

Set Para1 = hisCMD.CreateParameter("as_patient_id", adVarChar, adParamInput, 100, "00")

Para1.Value = "3333333"

hisCMD.Parameters.Append Para1

Set Para2 = hisCMD.CreateParameter("as_io_flag", adVarChar, adParamInput, 100, "1")

Para2.Value = "1"

hisCMD.Parameters.Append Para2

MsgBox "hiscmd"

Set hisRST = hisCMD.Execute

MsgBox "得到记录集!"

如果把连接改成

Provider=msdaora.1;Data Source=服务名;User ID=i_pathology;Password=i_pathology;

的话,提示参数数量和类型不对.第三个参数是游标,我查了,应该不用赋值的.

【解决方案二】:

PL/SQL 代码:

CREATE OR REPLACE PACKAGE "SCOTT"."PKG_TEST" AS

TYPE myrcType IS REF CURSOR;

FUNCTION get(strbarcode VARCHAR) RETURN myrcType;

END pkg_test;

CREATE OR REPLACE PACKAGE BODY "SCOTT"."PKG_TEST" AS

FUNCTION get(strbarcode IN VARCHAR) RETURN myrcType IS

rc myrcType;

BEGIN

OPEN rc FOR strbarcode;

RETURN rc;

END get;

END pkg_test;

--------------------------------------------------------------------------------------------------------

VB 代码:

Private Sub Command1_Click()

On Error GoTo cursorErr:

Dim cnn As New ADODB.Connection

Dim rst As New ADODB.Recordset

Dim cmd As New mand

cnn.ConnectionString = "Provider=OraOLEDB.Oracle.1;Password=tiger;Persist Security Info=True;User ID=scott;Data Source=oraAny;Extended Properties=PLSQLRSet=1"

cnn.Open

With cmd

.ActiveConnection = cnn

.CommandType = adCmdText

.CommandText = "{CALL scott.pkg_test.get(?)}"

.Parameters.Append .CreateParameter("strBarCode", adVarChar, adParamInput, 100, "SELECT * FROM TAB")

End With

rst.CursorType = adOpenStatic

rst.LockType = adLockReadOnly

Set rst.Source = cmd

rst.Open

MsgBox rst.RecordCount

Set rst = Nothing

Set cmd = Nothing

Exit Sub

cursorErr:

Set cmd = Nothing

Set rst1 = Nothing

MsgBox Err.Description

End Sub

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。