[英]Get OCCI Connection from Pro*C connection?
我們維護了一系列用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; dr:你不能重用與OCCI的Pro * C連接,但是OTL 支持連接重用。
Pro * C運行時庫在內部使用OCI API。 Oracle記錄了如何獲取當前使用的OCI句柄:
預編譯器應用程序可以提取OCI句柄並直接調用OCI函數。 但是,不支持非阻塞模式,因為預編譯器無法處理可能返回的“仍在執行”的錯誤。 (Oracle的Pro * C程序員指南 ,11.2g)
您可以在嵌入式CONNECT語句后獲取OCI句柄。
有關詳細信息,請參見SQLEnvGet()
/ SQLSvcCtxGet()
函數。
雖然OCCI也在內部使用OCI,但它沒有提供任何方法來“從現有的OCI句柄開始”。 一旦您與OCCI連接,它只提供獲取其OCI句柄的方法。
與OCCI相比, OTL允許您從現有的OCI句柄開始 。 與OCCI類似,它為C ++中的動態SQL提供了方便的API。 此外,與OCCI不同,它只是頭文件(不再是C ++編譯器/ STL問題),開源,可移植,其API比OCCI更好。 因此,如果您希望在比OCI / Pro * C更高的級別上與Oracle進行交互,那么它可以說是比OCCI更好的替代方案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.