调用不带参数的oracle存储过程ADODB

Calling an oracle stored procedure with no parameters ADODB

我还没有找到关于如何使用 ADODB 从 Excel 调用 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 声明它们。

看看 Provider for OLE DB Developer's Guide, it contains several examples. Chapter Stored Procedures and Functions Returning Rowsets 应该是最适合你的。