ORACLE支援幾種進階語言中內嵌入SQL語句,或ORACLE庫函數調用來訪問資料庫。它們是C,COBOL,Ada,PASCAL,PL/I等,這些語言稱之為宿主語言,用它們開發的程式就稱為PRO* 程式,如PRO*C,PRO*COBOL等。
PROC在ORACLE的用戶端軟體中就有,安裝oracle時選上即可。
1.什麼是Pro*C/C++
通過在過程化程式設計語言C/C++中嵌入SQL語句而開發出的應用程式.
2.簡要說明:
在通用程式設計語言中使用的SQL稱為嵌入式SQL.目的是Pro*C/C++將使 C/C++成為訪問資料庫的工具.
在ORACLE資料庫管理和系統中, 有三種訪問資料庫的方法;
(1) 用SQL*Plus, 它有SQL命令以互動的應用程式訪問資料庫;
(2)用第四代語言應用開發工具開發的應用程式訪問資料庫,這些工具有SQL*Froms,QL*Reportwriter,SQL*Menu等;
(3) 利用在第三代語言內嵌入的SQL語言或ORACLE庫函數調用來訪問。
Pro*C就屬於第三種開發工具之一, 它把過程化語言C和非過程化語言SQL最完善地結合起來,具有完備的過程處理能力,又能完成任何資料庫的處理品任務,使使用者可以通過編程完成各種類型的報表。
在Pro*C程式中可以嵌入SQL語言,利用這些SQL語言可以完成動態地建立、修改和刪除資料庫中的表,也可以查詢、插入、修改和刪除資料庫表中的行, 還可以實現事務的提交和復原。
在Pro*C程式中還可以嵌入PL/SQL塊, 以改進應用程式的效能, 特別是在網路環境下,可以減少網路傳輸和處理的總開銷。
2.Pro*C的程式結構圖通俗來說,Pro*C程式實際是內嵌有SQL語句或PL/SQL塊的C程式, 因此它的組成很類似C程式
ORACLE 8.16 FOR RHLINUX6.2的PRO*C環境
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