基本介紹
- 外文名:pro*c
- 性質:工具
- 宿主語言: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目錄下。
程式開發
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選項,它要求關閉所有打開的游標,之後斷開與資料庫伺服器的連線。
檔案生成
#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檔案就是我們的執行檔。