Posted on 2008-09-10 09:52
Prayer 閱讀(1213)
評論(0) 編輯 收藏 引用 所屬分類:
數(shù)據(jù)庫,SQL 、
C/C++
將SQL嵌入到高級語言中混合編程,程序中會含有兩種不同計算模型的語句:
(1)SQL語句:描述性的面向集合的語句;負責(zé)操縱數(shù)據(jù)庫
(2)高級語言語句:過程性的面向記錄的語句;負責(zé)控制程序流程。
工作單元之間的通信方式:
1. SQL通信區(qū):向主語言傳遞SQL語句的執(zhí)行狀態(tài)信息;主語言能夠據(jù)此控制程序流程
2. 主變量:
(1)主語言向SQL語句提供參數(shù)。
(2)將SQL語句查詢數(shù)據(jù)庫的結(jié)果交主語言進一步處理。
3. 游標(biāo):解決集合性操作語言與過程性操作語言的不匹配。
一、SQL通信區(qū)
SQLCA: SQL Communication Area。SQLCA是一個數(shù)據(jù)結(jié)構(gòu)
SQLCA的用途:
SQL語句執(zhí)行后,DBMS反饋給應(yīng)用程序信息
(1)描述系統(tǒng)當(dāng)前工作狀態(tài)
(2)描述運行環(huán)境
這些信息將送到SQL通信區(qū)SQLCA中,應(yīng)用程序從SQLCA中取出這些狀態(tài)信息,據(jù)此
決定接下來執(zhí)行的語句。
SQLCA的使用方法:
用EXEC SQL INCLUDE SQLCA加以定義。SQLCA中有一個存放每次執(zhí)行SQL語句后返回
代碼的變量SQLCODE。如果SQLCODE等于預(yù)定義的量SUCCESS,則表示SQL語句成功,
否則表示出錯;應(yīng)用程序每執(zhí)行完一條SQL 語句之后都應(yīng)該測試一下SQLCODE的值,
以了解該SQL語句執(zhí)行情況并做相應(yīng)處理。
例:在執(zhí)行刪除語句DELETE后,不同的執(zhí)行情況,SQLCA中有不同的信息:
違反數(shù)據(jù)保護規(guī)則,操作拒絕
沒有滿足條件的行,一行也沒有刪除
成功刪除,并有刪除的行數(shù)
無條件刪除警告信息
由于各種原因,執(zhí)行出錯
二、主變量
嵌入式SQL語句中可以使用主語言的程序變量來輸入或輸出數(shù)據(jù)。在SQL語句中使用的
主語言程序變量簡稱為主變量(Host Variable)。
主變量的類型:
輸入主變量:由應(yīng)用程序?qū)ζ滟x值,SQL語句引用。
輸出主變量:由SQL語句賦值或設(shè)置狀態(tài)信息,返回給應(yīng)用程序。
一個主變量有可能既是輸入主變量又是輸出主變量。
一個主變量可以附帶一個指示變量(Indicator Variable)
指示變量一個整型變量,用來“指示”所指主變量的值或條件。
指示變量的用途:輸入主變量可以利用指示變量賦空值;輸出主變量可以利用指示
變量檢測出是否空值,值是否被截斷
在SQL語句中使用主變量和指示變量的方法
(1) 說明主變量和指示變量
BEGIN DECLARE SECTION
.........
......... (說明主變量和指示變量)
.........
END DECLARE SECTION
(2) 使用主變量
說明之后的主變量可以在SQL語句中任何一個能夠使用表達式的地方出現(xiàn)
為了與數(shù)據(jù)庫對象名(表名、視圖名、列名等)區(qū)別,SQL語句中的主變
量名前要加冒號(:)作為標(biāo)志。
(3) 使用指示變量
指示變量前也必須加冒號標(biāo)志
必須緊跟在所指主變量之后
在SQL語句之外(主語言語句中)使用主變量和指示變量的方法:
可以直接引用,不必加冒號。
三、游標(biāo)(cursor)
游標(biāo)是系統(tǒng)為用戶開設(shè)的一個數(shù)據(jù)緩沖區(qū),存放SQL語句的執(zhí)行結(jié)果。每個游標(biāo)區(qū)都有
一個名字,用戶可以用游標(biāo)逐一獲取記錄,并賦給主變量,交由主語言進一步處理。
為什么要使用游標(biāo):
SQL語言與主語言具有不同數(shù)據(jù)處理方式
SQL語言是面向集合的,一條SQL語句原則上可以產(chǎn)生或處理多條記錄
主語言是面向記錄的,一組主變量一次只能存放一條記錄,僅使用主變量并不能完全
滿足SQL語句向應(yīng)用程序輸出數(shù)據(jù)的要求。
嵌入式SQL引入了游標(biāo)的概念,用來協(xié)調(diào)這兩種不同的處理方式