将多行从Oracle SQL存储过程返回到Excel(VBA)

时间:2017-02-28 18:28:27

标签: sql excel oracle vba stored-procedures

我正在尝试将当前在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?

谢谢!

0 个答案:

没有答案