2012-01-11 43 views
0

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

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

这是非常简单的,但这里是无论如何这条线。

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

任何想法?

回答

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似乎并不符合你所做的描述。

+0

非常感谢你,我疯了。至于程序名称,它确实按照我所说的做了,它的目的是在我尝试做出东西时切换;但是为了清楚起见,我忘记在这里改变它的名字。 – Paradoxyde 2012-01-12 14:44:57