-
pro*c
鎖定
- 外文名
- pro*c
- 性 質
- 工具
- 宿主語言
- C語言
- 適 合
- 初學者
pro*c工具概述
ORACLE支持在幾種高級語言內嵌入SQL語句,或ORACLE庫函數調用來訪問數據庫。它們是C,COBOL,Ada,PASCAL,PL/I等,這些語言稱之為宿主語言,用它們開發的程序就稱為PRO* 程序,如PRO*C,PRO*COBOL等。
PROC在ORACLE的客户端軟件中就有,安裝oracle時選上即可。
pro*c工具介紹
1.什麼是Pro*C/C++
通過在過程化編程語言C/C++中嵌入SQL語句而開發出的應用程序.
2.簡要説明:
(1) 用SQL*Plus, 它有SQL命令以交互的應用程序訪問數據庫;
(2)用第四代語言應用開發工具開發的應用程序訪問數據庫,這些工具有SQL*Froms,QL*Reportwriter,SQL*Menu等;
Pro*C就屬於第三種開發工具之一, 它把過程化語言C和非過程化語言SQL最完善地結合起來,具有完備的過程處理能力,又能完成任何數據庫的處理品任務,使用户可以通過編程完成各種類型的報表。
在Pro*C程序中還可以嵌入PL/SQL塊, 以改進應用程序的性能, 特別是在網絡環境下,可以減少網絡傳輸和處理的總開銷。
pro*c環境設置
(1)C編譯器
(2)PRO*C預編譯器
(3)C語言頭文件和函數庫。
Oracle安裝程序將這些文件安裝在$ORACLE_HOME/precomp目錄下。
pro*c程序開發
(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;
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;
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文件就是我們的可執行文件。