Pro C 的使用 三

2021-08-30 19:13:03 字數 2037 閱讀 9391

(7) 動態定義語句

sql語句分動態定義語句和靜態定義語句兩種:

(1) 靜態定義語句:sql語句事先編入pro*c中,在經過預編譯器編譯之後形成目標程式*。boj,然後執行目標程式預即可。

(2) 動態定義語句:有些語句不能事先嵌入到pro*c程式中,要根據程式運**況,使用者自己從輸入裝置上(如終端上)實時輸入即將執行的sql語句。

動態定義語句有:

l execute immediate;

l prepare 與execute;

l prepare與fetch 和 open ;

l bind與define descriptor。

1. execute immediate語句

此語句表示立即執行, 並且只向sqlca返回執行結果,無其它資訊。例如:

exec sql begin declare section;

varchar abcd[89];

varchar deay[20];

exec sql end declare section;

/**  輸出字串到abcd **/

exec sql execute immediate :abcd;

注意:1) execute immediate只能執行帶乙個引數的動態語句。其中,abcd是引數,不是關鍵字。

2) execute immediate使用的先決條件是:sql語句不能包含主變數;sql語句不能是查詢語句。

3) 可用任何主變數作為execute immediate的引數;也可用字串作為主變數。

2. prepare與execute語句

此語句表示「預編譯/執行」。此語句能夠預編譯一次而執行多次。語法為:

exec sql prepare 〈語句名〉from:主變數;

exec sql execute〈語句名〉[using:替換主變數];

prepare語句做兩件事:

(1) 預編譯sql語句;

(2) 給出sql語句的語句名。

注意:l sql語句不能是查詢語句;

l prepare和execute可包含主變數;

l prepare不能多次執行。

例如:#define username 「scott」

#define password 「tiger」

#include

exec sql include sqlca;

exec sql begin declare section;

char * username=username;

char * password=password;

varchar sqlstmt[80];

int emp_number;

varchar emp_name[15];

varchar job[50];

exec sql end declare section;

main()

exec sql execute s using :emp_number,:emp_name,:job,:salary;

} 3. fetch語句和open語句

fetch語句和open語句這組動態語句是對游標進行操作的,其執行過程如下:

注意:l sql語句允許使用查詢語句;

l select子句中的列名不能動態改變,只能預置;

l where和order by 子句可以動態改變條件。

一、 pro*c的編譯和執行

1. 先用oracle預編譯器proc對pro*c程式進行預處理,該編譯器將源程式中嵌入的sql語言翻譯成c語言,產生乙個c語言編譯器能直接編譯的檔案。生成檔案的擴充套件名為 .c

2. 用c語言編譯器cc 對擴充套件名為 .c的檔案編譯,產生目標碼檔案,其擴充套件名為 .o

3. 使用make命令,連線目標碼檔案,生成可執行檔案

例如: 對上面的example.pc進行編譯執行

proc iname=example.pc

cc example.c

make exe=example objs=」example.o」

example

使用 proc測試

下面所示清單為乙個簡單的 proc 使用範例,這段 在模組載入函式中建立 proc 檔案節點,在模組解除安裝函式中撤銷 proc 節點,檔案中儲存了乙個32位無符號整形值。include include include static struct proc dir entry proc entry ...

Pro C中CLOB的使用

include include include 包含oci標頭檔案 include 包含sqlca標頭檔案 include void connect void sql error void init clob void read clob void write clob int main retur...

proc原始碼解析(三) proc初始化

在使用proc之前,我們必須首先初始化並掛載proc,並在核心記憶體中建立資料結構來描述檔案系統。但是,不同的體系結構擁有不同的proc內容,所以,在初始化階段並不完全建立子目錄的內容,有些檔案要等到系統執行時動態建立。proc檔案系統初始化的流程圖如下 proc root init的定義定義如下 ...