我还没有找到任何关于如何使用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。
这甚至可能吗?如果是这样,那么调用它需要什么样的代码呢?
谢谢, 丹
答案 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章应该与您最相关。