C++ 无法通过OLEDB执行存储过程

C++ 无法通过OLEDB执行存储过程,c++,database,oracle,stored-procedures,oledb,C++,Database,Oracle,Stored Procedures,Oledb,我正在本地运行Oracle 11gR2的一个实例进行测试。我正在使用VC++与OLEDB连接。我使用CCommand,可以从我的表中选择、更新、插入和删除。 我现在不能做的是执行存储过程 它是一个简单的存储过程,可以在我的表中插入一行。我可以从SQL Plus顺利运行它。然而,当我从代码中执行它时,它不起作用。我得到一个80040e14错误 这很简单,但这是一句话 hr = cmd.Open(session, "exec get_item_count"); 有什么想法吗?EXEC是SQL*加语

我正在本地运行Oracle 11gR2的一个实例进行测试。我正在使用VC++与OLEDB连接。我使用CCommand,可以从我的表中选择、更新、插入和删除。
我现在不能做的是执行存储过程

它是一个简单的存储过程,可以在我的表中插入一行。我可以从SQL Plus顺利运行它。然而,当我从代码中执行它时,它不起作用。我得到一个80040e14错误

这很简单,但这是一句话

hr = cmd.Open(session, "exec get_item_count");

有什么想法吗?

EXEC
是SQL*加语法。它在SQL*Plus(以及实现SQL*Plus提供的许多功能的各种PL/SQL GUI)之外无效

您可能想要这样的东西(使用ODBC语法)

或者这个(使用Oracle语法)

如果您使用Oracle语法,那么在SQL*Plus和应用程序中都可以使用相同的语法。SQL*Plus不理解ODBC语法。但是,其他OLEDB提供程序将支持ODBC语法,因此ODBC语法可以跨不同的数据库引擎移植


此外,如果您有一个检索项目计数的PL/SQL对象,那么它应该是一个存储函数,而不是一个存储过程。您说该过程正在向表中插入一行,这是一个过程应该做的事情,而函数不应该做的事情,但是对象的名称
get\u item\u count
似乎与您描述的它正在做的事情不匹配。

非常感谢,我快疯了。至于程序名,它确实按照我说的做了,它的目的在我尝试的时候改变了;但是为了清楚起见,我忘了在这里更改它的名称。
hr = cmd.Open(session, "{call get_item_count}");
hr = cmd.Open(session, "begin get_item_count; end;");