我從來沒有與Oracle合作過,而且我通常只使用標準的SQL功能。如何從Oracle存儲過程使用C++函數
我有一個C++共享庫,我用GCC 4.2.4編譯,我需要從Oracle存儲過程中調用它的功能。
我可以直接使用共享庫嗎?或者我必須使用某些特殊標籤來構建它?
我是否必須在oracle中創建一個函數或特殊的東西來實際調用C++代碼?
如何映射類型?我需要做一些編組嗎?
我從來沒有與Oracle合作過,而且我通常只使用標準的SQL功能。如何從Oracle存儲過程使用C++函數
我有一個C++共享庫,我用GCC 4.2.4編譯,我需要從Oracle存儲過程中調用它的功能。
我可以直接使用共享庫嗎?或者我必須使用某些特殊標籤來構建它?
我是否必須在oracle中創建一個函數或特殊的東西來實際調用C++代碼?
如何映射類型?我需要做一些編組嗎?
看來你需要使用Oracle External Procedures。
長話短說。 Oracle不允許你訪問它的地址空間。 C存儲過程與MySQL和PostgreSQL中的不同。你必須:
CREATE LIBRARY
extproc
(或extproc32
)的特殊進程。該過程將加載您的共享庫,並通過IPC與其餘的Oracle進行通信。最好的地方是Oracle服務器的安裝,含有C OCI樣本。在那裏你會找到一個這樣的共享庫的骨架,還有一個將編譯它的Makefile
。
是的,可以做到。自從我與甲骨文合作多年以來,我認爲vershov提供了正確的鏈接。有一件事要注意的是,如果你打算一遍又一遍地調用這個例程,由於調用外部代碼所涉及的開銷,整體可能會非常慢。有時候這是必要的,儘管如此。 – Matt