无法通过OLEDB执行存储过程

时间:2012-01-11 21:58:47

标签: c++ database oracle stored-procedures oledb

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

这是一个简单的存储过程,可以在我的表中插入一行。我可以毫不费力地从SQL Plus运行它。但是,当我从我的代码执行它时,它不起作用。我收到80040e14错误。

这很简单,但无论如何都是这条线。

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

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

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

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

hr = cmd.Open(session, "{call get_item_count}");

或者(使用Oracle语法)

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

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

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