目前在重建一個LINUX下的服務程序,需要用到ORACLE 的PRO*C。以下是學習筆錄:
一、PRO*C簡介
ORACLE除了提供SQL * PLUS,SQL * FORMS等數據庫訪問工具進行數據庫訪問外還可以在第三代高級語言中內嵌SQL語句或ORACLE函數的方式來訪問ORACLE數據庫。目前ORACLE支持的語言有C,FORTRAN,PASCAL等,採用C的部分就叫做PRO*C。其中內嵌的SQL語句包括了DML,DDL語句,可以實現動態的建立,修改,刪除數據庫中的表,也可以查詢,插入,刪除表中的表中的行,實現數據庫操作的提交和回滾。使用第三代高級語言內嵌SQL語句的好處有如下三點:
1、過程化語言與非過程化語言相結合可以滿足各種複雜要求的應用,還可以引用窗口和鼠標技術。
2、可以使開發的應用程序具有管理資源,SQL語句執行和指示器等能力
3、提高應用程序的執行速度。
所有PRO*C的程序在編譯前都要經過ORACLE的預編譯系統進行預編譯,預編譯系統允許採用動態SQL技術,能實現內部和外部數據類型的轉換,可以嵌入PL/SQL塊,能用數據類型等價來控制ORACLE解釋輸入數據和格式化輸出數據,可以檢查嵌入的SQL語句的語法和語義,可以使用數組SQL變量能利用SQLCA和ORACA進行錯誤診斷。
二、PRO*C程序結構
一般PRO*C主要有外部說明段與程序主體兩部分組成。
外部說明段:主要說明了程序中要引用到的外部變量和函數,包括了說明段,通訊區說明和C語言的相關聲明。
程序主體:同一般C程序的主體部分,可以用多個函數或僅有MAIN函數。函數中又可以包含局部說明段,局部通訊區聲明和C局部變量聲明。
說明段語法如下:
EXEC SQL BEGIN DECLARE SECTION;
(SQL變量聲明)
EXEC SQL END DECLARE SECTION;
說明段用於聲明SQL變量中只允許包含:
SQL變量的類型聲明語句;
EXEC SQL INCLUDE語句;
EXEC SQL VAR語句;
EXEC SQL VAR語句;
但不允許包含聲明爲結構類型的SQL變量。
通訊區說明語句爲:EXEC SQL INCLUDE SQLCA;
其中SQLCA爲結構體,具體內容可以查看ORACLE預編譯系統的頭文件sqlca.h(windows 下的路徑爲:$orahome/precomp/public/)
struct sqlca
{
char sqlcaid[8]; /*通訊區ID,(聲明多個時是不是用ID區別?)
int sqlabc; /*通訊區長度
int sqlcode; /*等同與SQLCODE指示SQL錯誤代碼
struct
{ /*結構體等同於SQLERRM用戶貯存SQL錯誤信息。
unsigned short sqlerrml; /*錯誤信息文本長度
char sqlerrmc[70]; /*錯誤信息文本
} sqlerrm;
char sqlerrp[8];
int sqlerrd[6];
char sqlwarn[8]; /*SQL語句警告
char sqlext[8];
};
三、數據類型
(1)、SQL變量:SQL變量是爲了能實現C和SQL語句間傳遞信息而引入的,SQL變量可以在兩語句中使用,但C變量只能在C中使用。
(2)、內部數據類型:指ORACLE按什麼格式把數據存貯在數據庫表列中,(ORACLE特有的數據類型)見下表
(3)、外部數據類型:指描述如何把數據存貯在SQL變量中,包括ORACLE全部內部數據類型與C的數據類型。見下表
(4)、能在說明段中指定爲SQL變量的數據類型。見下表
數據類型 | 描述 |
char | 單字符 |
char[n] | 字符數組 |
int | 整數 |
short | 短整數 |
long | 長整數 |
float | 單精度浮點數 |
double | 雙精度浮點數 |
varchar[n] | 變長字符串 |