【问题标题】:Get OCCI Connection from Pro*C connection?从 Pro*C 连接获取 OCCI 连接?
【发布时间】:2011-11-01 09:30:51
【问题描述】:

我们维护着大量用 C++ 编写的组件,这些组件在 Linux、Solaris、AIX 和 HP/UX 下运行,这些组件使用 Pro*C 连接到 Oracle 数据库。我即将编写一个执行大量动态 SQL 的组件,并希望使用 OCCI 实现该功能。我们所有组件的基类使用相当普通的 Pro*C 创建到数据库的连接:

EXEC SQL CONNECT :user IDENTIFIED BY :password AT :alias USING :name;

alias 将在未来的所有 Pro*C 代码中用于与数据库交互。

是否可以从这里获得 OCCI 连接,以便我可以保持我们的基类实现不变,但在我的组件中使用 OCCI?

【问题讨论】:

    标签: c++ oracle unix oracle-pro-c occi


    【解决方案1】:

    tl;dr:您不能将 Pro*C 连接与 OCCI 重用,但 OTL 可重用连接 is supported

    Pro*C 运行时库在内部使用 OCI API。 Oracle 文档如何获取当前使用的 OCI 句柄:

    预编译器应用程序可以提取 OCI 句柄并直接调用 OCI 函数。但是,不支持非阻塞模式,因为预编译器无法处理可能返回的“仍在执行”错误。 (甲骨文的Pro*C Programmer's Guide,11.2g)

    您可以在嵌入的 CONNECT 语句之后获取 OCI 句柄。

    有关详细信息,请参阅SQLEnvGet()/SQLSvcCtxGet() 函数。

    虽然 OCCI 也在内部使用 OCI,但它不提供任何“从”现有 OCI 句柄的方式。它只提供获取其 OCI 句柄的方法,一旦您与 OCCI 连接。

    与 OCCI 相比,OTL allows you to start from an existing OCI handle。与 OCCI 类似,它为 C++ 中的动态 SQL 提供了方便的 API。此外,与 OCCI 不同的是,它只有头文件(不再有 C++ 编译器/STL 问题)、开源、可移植,并且它的 API 比 OCCI 的设计更好。因此,如果您想在比 OCI/Pro*C 更高的级别上与 Oracle 交互,它可以说是比 OCCI 更好的选择。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-10-08
      • 2013-04-25
      • 2021-05-12
      • 2011-05-28
      • 2018-12-24
      • 1970-01-01
      • 2023-03-16
      • 2021-03-10
      相关资源
      最近更新 更多