gpt4 book ai didi

c++ - 无法通过OLEDB执行存储过程

转载 作者:行者123 更新时间:2023-11-28 03:42:07 27 4
gpt4 key购买 nike

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

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

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

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

有什么想法吗?

最佳答案

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 似乎与您的描述不符它在做什么。

关于c++ - 无法通过OLEDB执行存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8827297/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com