1、PRO*C:
ORACLE數據庫作為數據庫產品中的佼佼者,應用十分廣泛,隨著對其應用的深入,使用ORACLE和C來編制應用系統成為許多系統的選擇,而ORACLE和C語言的接口知識成為應該掌握的和十分有用的。
PRO*C是ORACLE的預編譯器是一種編程工具,通過它把SQL語句嵌入到C語言程序中。如圖:
預編譯器把源程序作為輸入,然後翻譯程序中嵌入的 SQL語句,把它們轉化成對標准的ORACLE運行庫的調用,最後生成一個修改過的源程序。通過對修改過的源程序進行編譯、鏈接,形成可執行文件。
2、環境配置:
A、說明:
ORACLE預編譯器在ORACLE 8I安裝時是默認或選擇安裝的,安裝了PRO*C,則在$ORACLE_HOME/bin路徑下就有了可執行程序PROC,以及相應的未經配置預編譯環境。為使PRO*C預編譯器能工作我們還必須對環境做一些配置。
ORACLE的PRO*C是對預編譯器的選項值的改變來配置環境的。預編譯指令基本格式如下:
Proc 選項名=選項值 源文件
也可把選項值的改變放到CONFIG指定的文件中做。
PROC的選項
auto_connect
允許自動連接到 ops$ 帳號
char_map
正在映射字符數組和字符串
Close_on_commit
關閉所有 COMMIT 游標
codekr_c
將要生成的代碼類型
Comp_charset
C 編譯器支持的字符集類型
Config
用另一配置文件覆蓋系統配置文件
Cpp_suffix
覆蓋缺省的 C++ 文件名後綴
dbmsnative
兼容模式
Def_sqlcode
生成 '#define SQLCODE sqlca.sqlcode' 宏
Define
定義預處理器符號
Durationtransaction
設置高速緩存中對象的 pin 持續時間
Dynamic
指定 Oracle 或 ANSI 動態 SQL 語義
Errors
是否將錯誤消息發送到終端
Errtype
輸入文件的列表文件名稱錯誤
Fips
ANSI 的 FIPS 標志不符合用法
Header
為預編譯標題指定文件擴展名
hold_cursor
在游標高速緩存中控制游標保留
iname
輸入文件的名稱
Include
包括文件的目錄路徑
Intype
有關類型信息的輸入文件名稱
Lines
將 #line 指令添加到生成的代碼中
Lname
覆蓋缺省列表文件名
Ltype
列表文件中生成的數據量
maxliteral
生成的文字串的最大長度
maxopencursors
高速緩存的開放游標的最大數量
mode
代碼符合 Oracle 或 ANSI 規則
Nls_char
指定國家語言字符變量
Nls_local
控制 NLS 字符語義的實現方法
Objects
支持對象類型
oname
輸出文件名
oraca
控制 ORACA 的使用
Pagelen
列表文件頁面長度
parse
控制進行語法分析的非 SQL 代碼
prefetch
游標 OPEN 期間預讀取的行數
Release_cursor
控制從游標高速緩存中釋放游標
Select_error
控制選擇標記錯誤
sqlcheck
編譯時間 SQL 校驗總量
Sys_include
系統標題文件所在目錄
Threads
指示多線程應用程序
type_code
將 Oracle 或 ANSI 類型代碼用於動態 SQL
Unsafe_null
允許在沒有指示變量的情況下進行> NULL 讀取
Userid
用戶名/口令 [@dbname] 連接串
Varchar
允許使用隱式 varchar 結構
Version
將要返回的對象版本
大部分選項我們都可以用默認值,但其中有幾個選項是需要配置的。
l CONFIG:指定PROC的CONFIG文件。PROC默認配置文件為$ORACLE_HOME/precomp/admin/pcscfg.cfg,我們可以編輯我們要使用的CONFIG文件。
l INCLUDE:包括文件的目錄路徑,一般在CONFIG文件中配置,pcscfg.cfg中有默認定義。
l
SYS_INCLUDE:系統頭文件所在目錄,一般在CONFIG文件中配置,pcscfg.cfg中有默認定義。但要注意可能默認的系統頭文件的路徑不對。如
sys_include=($ORACLE_HOME/precomp/public,/usr/include,/usr/lib/gcc-lib/i386-redhat-linux/egcs-2.91.66/include)
lUSERID:用戶名/口令 [@dbname] 連接串
B、配置:
配置工作比較簡單,只要將默認的>CONFIG文件COPY到源程序所在的路徑下,修改其中的USERID。
使用如下命令對PROC源文件進行預編譯,輸出相應的C源程序。
Proc config=myconfg.cfg iname=myprog.pc oname=myprog.c
PRO*C將對INAME指定的PROC源文件進行預編譯,輸出ONAME指定的文件。
3、聯編環境:
預編譯只是將PROC源文預編譯成C源文件,而要將不同源文件編譯生成的目標文件聯編,則要指定聯編所需要的LIBRARY,ORACLE接口程序(PROC程序)需要的the client shared library分布在許多路徑下,為聯編方便,ORACLE提供了$ORACLE_HOME/precomp/demo/proc/demo_proc.mk文件。
使用如下命令:
make–f demo_proc.mk OBJS=”myporg.o mydb.o” EXE=myprog.e build
就可以完成聯編。
——蘭振興([email protected])