標籤:
1、訪問資料庫的方法
在ORACLE資料庫管理和系統中,有三種訪問資料庫的方法;
⑴.用SQL*Plus, 它有SQL命令以互動的應用程式訪問資料庫;
⑵.用第四代語言應用開發工具開發的應用程式訪問資料庫,這些工具有SQL*Froms,QL*Reportwriter,SQL*Menu等;
⑶.利用在第三代語言內嵌入的SQL語言或ORACLE庫函數調用來訪問。
Pro*C就屬於第三種開發工具之一, 它把過程化語言C和非過程化語言SQL最完善地結合起來, 具有完備的過程處理能力,又能完成任何資料
庫的處理品任務,使使用者可以通過編程完成各種類型的報表。在Pro*C程式中可以嵌入SQL語言,利用這些SQL語言可以完成動態地建立、修改和
刪除資料庫中的表,也可以查詢、插入、修改和刪除資料庫表中的行,還可以實現事務的提交和復原。在Pro*C程式中還可以嵌入PL/SQL塊,以
改進應用程式的效能,特別是在網路環境下,可以減少網路傳輸和處理的總開銷。
2、編譯過程
Pro*C是oracle的先行編譯器是一種編程工具,通過它把SQL語句嵌入到C語言程式中,編譯過程如下:
Pro*C源檔案(*.pc) -> C源檔案(*.c) -> 目標檔案(*.o) -> 可執行檔。
先行編譯器把來源程式作為輸入,然後翻譯程式中嵌入的SQL語句,把它們轉化成對標準的ORACLE運行庫的調用,最後產生一個修改過的來源程式。
通過對修改過的來源程式進行編譯、連結,形成可執行檔。
3、Pro*C標頭檔和庫檔案
4、Oracle先行編譯選項設定檔
預設在$ORACLE_HOME/bin路徑下就有了可執行程式PROC以及相應的未經配置先行編譯環境。Pro*C先行編譯時的選項很多,可以把它放到一個檔案中
.如果在先行編譯時不指定設定檔, 則預設設定檔是 $ORACLE_HOME/precomp/admin/pcscfg.cfg
編輯pcscfg.cfg檔案:
sys_include=(/opt/oracle/precomp/public,/usr/lib/gcc/i386-redhat-linux/4.1.1/include,/usr/lib/i386-redhat-linux4E/include/
bits,/home/uriel/git-2.0.3/compat/vcbuild/include,/usr/lib/i386-redhat-linux4E/include)
ltype=short
此檔案的sys_include中應包含sqlca.h及sqlda.h所在的路徑(否則編譯時間報:‘sqlca’ 未聲明),我這裡為/opt/precomp/public。還需要包括
stddef.h所在的路徑,我這裡為/usr/lib/gcc/i386-redhat-linux/4.1.1/include。如果這兩個檔案你也不知道在什麼位置,可以通過
#find / -name "sqlca.h"
#find / -name "stddef.h"
來尋找。另外再將常用的標頭檔路徑加上即可,如/usr/include。
5、Oracle先行編譯選項
6、編譯過程舉例(具體實現可參考makefile部落格)
第一步,對帶有嵌入式SQL的C代碼程式(通常此程式以.pc結尾,簡稱PC代碼)使用proc做一次先行編譯,將裡面的嵌入式SQL轉化為代表資料庫功能調用的C代碼。
第二步,使用C編譯器將C代碼編譯串連(其中包含資料庫中的庫 libclntsh.so)成可執行檔。
.pc->.c: $proc iname=sample1.pc oname=sample1.c
.c->.o $cc –c sample1.c
.o->可執行檔 $cc –L$ORACLE_HOME/lib –lclntsh –o sample1 sample1.o
嵌入式C編譯時間還需連結-lclntsh庫(資料庫中的庫 libclntsh.so)
配置ORACLE的PRO*C環境