从Pro * C连接获取OCCI连接?

时间:2011-11-01 09:30:51

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

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

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

所有未来的Pro * C代码都使用alias与数据库进行交互。

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

1 个答案:

答案 0 :(得分:1)

tl; dr:你不能重用与OCCI的Pro * C连接,但是is supported可以重用OTL连接。

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

  

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

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

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

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

与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更好的选择。