调用没有参数ADODB的oracle存储过程

时间:2018-05-30 15:41:07

标签: oracle excel-vba adodb vba excel

我还没有找到任何关于如何使用Excel中的ADODB调用Oracle存储过程的地方,其中存储过程没有输入参数。

举例说明缺少输入参数:

CREATE OR REPLACE PROCEDURE Get_Data
(OUTPUT OUT SYS_REFCURSOR) IS

******************************************************************************/
BEGIN

OPEN OUTPUT FOR 

SELECT DISTINCT
       B.ITEM_ID
       B.ITEM_DESC
    FROM ITEM_FILE B
WHERE ITEM_ID IS NOT NULL
 ORDER BY B.ITEM_ID
; 

END Get_Data;
/

哦,存储过程是必需的,因为我们不想让用户使用SQL访问来创建他们想要的任何SQL。

这甚至可能吗?如果是这样,那么调用它需要什么样的代码呢?

谢谢, 丹

1 个答案:

答案 0 :(得分:0)

将您的程序转换为函数:

CREATE OR REPLACE FUNCTION Get_Data RETURN SYS_REFCURSOR IS
res SYS_REFCURSOR;

BEGIN

OPEN OUTPUT FOR 
SELECT DISTINCT
       B.ITEM_ID
       B.ITEM_DESC
    FROM ITEM_FILE B
WHERE ITEM_ID IS NOT NULL
ORDER BY B.ITEM_ID;  
RETURN res;

END Get_Data;
/

VBA中的呼叫将如下:

cmd.CommandText = "{CALL Get_Data()}"
cmd.Properties("PLSQLRSet") = True
Set Rst1 = cmd.Execute 
cmd.Properties("PLSQLRSet") = False

注意,默认情况下,OUT参数的使用方式如下:

cmd.Parameters.Append cmd.CreateParameter("OUTPUT", adVarChar, adParamOutput, 100)

但是,对于RefCursor参数,您不得使用cmd.Parameters.Append声明它们。

看看Provider for OLE DB Developer's Guide,它包含几个例子。第Stored Procedures and Functions Returning Rowsets章应该与您最相关。