在这篇文章的序言中,我想说我对 Excel 2007 vba 宏相当陌生。我正在尝试调用一个以游标作为输出参数的 Oracle PL/SQL 存储过程。程序规范如下所示:
PROCEDURE get_product
(
out_cur_data OUT SYS_REFCURSOR,
rptid IN NUMBER,
scenario IN VARCHAR2
);
我将我的宏编写为:
Sub GetProduct()
Const StartRow As Integer = 4
Dim conn As ADODB.Connection
Set conn = New ADODB.Connection
With conn
.ConnectionString = "<my connection string>"
.Open
End With
Dim cmd As ADODB.Command
Set cmd = New ADODB.Command
With cmd
.ActiveConnection = conn
.CommandType = adCmdText
.CommandText = "{call their_package.get_product({out_cur_data 100},?,?)}"
.NamedParameters = True
.Parameters.Append cmd.CreateParameter("rptid", adNumeric, adParamInput, 0, 98)
.Parameters.Append cmd.CreateParameter("scenario", adVarChar, adParamInput, 4, "decline001")
End With
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
With rs
.CursorType = adOpenStatic
.CursorLocation = adUseClient
.LockType = adLockOptimistic
End With
Set rs = cmd.Execute
Cells(StartRow + 1, 1).CopyFromRecordset rs
rs.Close
conn.Close
End Sub
这显然不起作用,我收到运行时错误“-2147217900 (80040e14):处理命令期间发生一个或多个错误。”那么好吧。
我正在寻找一些有关如何将该光标带回 ADODB.RecordSet 的指导/建议。我认为我没有为“out_cur_data”正确设置输出光标,但到目前为止我在网上寻找任何帮助都没有结果。谁能给我一个基本的工作示例来帮助我理解我做错了什么?
顺便说一句...我根本无法控制存储过程,它来自外部包。
非常感谢任何帮助。
谢谢,
多兰