工具概述
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塊, 以改進應用程式的性能, 特別是在網路環境下,可以減少網路傳輸和處理的總開銷。
3.Pro*C的程式結構圖通俗來說,Pro*C程式實際是內嵌有SQL語句或PL/SQL塊的C程式, 因此它的組成很類似C程式
環境設定
(1)C編譯器
Solaris系統中常用的C語言編譯器是GCC,是GNU組織的免費C編譯器,一般Linux版本中預設都安裝有GCC,UNIX系統中有的並不自帶,因此需要手動安裝,本文所採用的GCC版本為3.2。
(2)PRO*C預編譯器
PRO*C使用預編譯技術,預編譯器將源程式中的SQL語句轉換為標準的Oracle庫函式調用,從而生成C源程式,再經C編譯器編譯、連結後生成執行檔。這個預編譯器是Oracle自帶的。
(3)C語言頭檔案和函式館。
Oracle安裝程式將這些檔案安裝在$ORACLE_HOME/precomp目錄下。
程式開發
(1)說明SQL通訊區
SQL通訊區用來記錄執行每一個嵌入SQL語句的狀態信息,通過在函式體外使用下列語句實現:
#include <sqlca.h> 或者 EXEC SQL INCLUDE sqlca;
(2)聲明宿主變數,即C變數
這些變數是應用程式與Oracle通信的橋樑,應用程式的輸入數據通過C變數傳遞給Oracle,反之,Oracle的輸出數據又通過C變數傳遞給應用程式。舉例如下:
EXEC SQL BEGIN DECLARE SECTION;
char szUsername[16];
VARCHAR varPassword[16];
char *szStmt1="CREATE TABLE USERS (USERNAME VARCHAR2(15) NOT NULL,PASSWORD
VARCHAR2(15) NOT NULL)";
char *szStmt2= "SELECT PASSWORD FROM USERS WHERE USERNAME="chen"";
EXEC SQL END DECLARE SECTION;
值得注意的是:在SQL語句中使用C變數時,前面需加冒號,例如上面的變數應表示為:szUsername。其中,VARCHAR為C擴展數據類型,預編譯時,PRO*C預編譯器將它擴展為一個C結構類型
struct
{
unsigned short len;
unsigned char arr[16];
}varNo;
在SQL語句中使用VARCHAR類型變數時,只需指出結構名稱varPassword就可,但在C語句中使用VARCHAR類型變數時,必須具體說明所操作變數的結構元素名稱是varPassword.len還是varPassword.arr。另外,如果用VARCHAR類型變數做函式參數的話,只能用指針形式。
(3)連線資料庫
EXEC SQL CONNECT :username/password@DBname;
通過sqlca.sqlcode的值來判斷連線資料庫成是否功。
(4)執行SQL語句(分為靜態SQL語句和動態SQL語句)
靜態SQL語句是在開發應用程式時就已經明確了的資料庫操作,如:
EXEC SQL SELECT password INTO :szPassword FROM USERS WHERE username=:szUsername;
動態SQL語句是在運行時由外部數據提供的,不能直接在C程式中嵌入SQL 語句,但可以調用放在一個字元串變數里的SQL語句,最簡單的方法是:EXEC SQL EXECUTE IMMEDIATE :szStmt1;但這樣執行的SQL語句不能實現查詢,實現查詢可用下列方法:
EXEC SQL PREPARE select_stmt FROM :szStmt2;
EXEC SQL EXECUTE select_stmt INTO :szPassword;
如果不再需要已準備好的語句,應釋放:EXEC SQL DEALLOCATE PREPARE select_stmt;
(5)提交或回滾所做的資料庫處理,並退出資料庫
回滾:EXEC SQL ROLLBACK WORK RELEASE;
提交:EXEC SQL COMMIT WORK RELEASE;
注意語句中的RELEASE選項,它要求關閉所有打開的游標,之後斷開與資料庫伺服器的連線。
檔案生成
在Solaris平台下可通過命令方式對PRO*C源程式進行預編譯,下列命令只列出了最常用的預編譯選項:
#proc iname=example.c INCLUDE=path CODE=ANSI_C MODE=ANSI CPP_SUFFIX=cc SQLCHECK=SEMANTICS USERID=username/password@DBname
預編譯後的example .cc檔案就可以當作普通的C源檔案來進行處理了。
#gcc -o exampled –I. -I/oracle/product/8.1.7/precomp/public example .cc
最終生成的exampled檔案就是我們的執行檔。