我还没有找到有关如何从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。
这可能吗?如果是这样,调用它需要什么样的代码?
谢谢 担
将过程转换为函数:
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
声明它们。
请查看 OLE DB 提供程序开发人员指南,其中包含几个示例。存储过程和函数一章 返回行集应该是与您最相关的。