【问题标题】:Calling an oracle stored procedure with no parameters ADODB调用不带参数 ADODB 的 oracle 存储过程
【发布时间】:2018-05-31 16:05:30
【问题描述】:

我还没有找到关于如何在 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。

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

谢谢, 丹

【问题讨论】:

  • 没问题。你有 IN 参数的例子吗?顺便说一句,您可能更喜欢写FUNCTION 而不是PROCEDURE

标签: oracle excel adodb vba


【解决方案1】:

将您的过程转换为函数:

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应该是最适合你的。

【讨论】:

  • 谢谢。我想到了。在调用 Prefix.stored_proc_name 时,我忘记了存储过程名称中的前缀/别名,一旦添加了前缀,它就可以正常工作。巧合的是,我用来调用存储过程的 VBA 代码几乎与您帖子中的代码完全相同。非常感谢你的回复。希望这段代码能帮助另一个。另外,感谢您的链接。
猜你喜欢
  • 2011-10-08
  • 2011-07-21
  • 1970-01-01
  • 2015-01-07
  • 2015-07-11
  • 1970-01-01
  • 2013-11-17
  • 2013-11-02
  • 2011-07-19
相关资源
最近更新 更多