我们维护着大量用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?

最佳答案

tl;博士:您不能与OCCI重用Pro * C连接,但是is supported可以重用OTL连接。

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



您可以在嵌入式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不同,它是仅 header 的(不再有C++编译器/ STL问题),开源,可移植,并且其API的设计比OCCI更好。因此,如果要在比OCI / Pro * C更高级别的Oracle上与Oracle交互,则可以说它是比OCCI更好的选择。

关于c++ - 从Pro * C连接获取OCCI连接?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7964601/

10-14 12:49