我正在尝试将当前在Oracle SQL Developer中执行的SQL查询(然后粘贴到Excel中)传输到Excel,以便通过VBA和存储过程调用它。
连接数据库的代码如下: Sub ConnectToOracle()
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim arr As Variant
connstr = "Provider=msdaora;Data Source=###;User Id=###;Password=###;"
Set cn = New ADODB.Connection
Set rs = New ADODB.Recordset
cn.Open connstr
rs.CursorType = adOpenForwardOnly
rs.Open ("select * from articles where artnr in (123, 234, 345)"), cn
arr = rs.GetRows
arr = transposeArray(arr)
Dim x As Long
Dim y As Long
x = UBound(arr, 1) - LBound(arr, 1) + 1
y = UBound(arr, 2) - LBound(arr, 2) + 1
Worksheets(1).Activate
ActiveSheet.Range(Cells(1, 1), Cells(x, y)) = arr
'Close connections
Set rs = Nothing
Set cn = Nothing
End Sub
这完美无缺。该代码提取了文章123,234和345的所有细节,并将其粘贴到Excel中。
但是,我应该替换的SQL大约是500行代码,我不想将其硬编码到VBA代码中,而是使用存储过程。我以前在MSSQL上使用它们,但从未在Oracle上使用它们。
我该怎么做?我在youtube上找到的唯一教程是如何返回单个值。但是,我需要返回一个数组。
目前我的存储过程如下所示:
CREATE OR REPLACE PROCEDURE get_articles AS
BEGIN
select
*
from articles
where
artnr in (123, 234, 345)
;
END get_articles;
但我不知道如何让它将值返回给Excel / VBA?
谢谢!