嵌入SQL
為了更好的理解嵌入SQL,本節利用一個具體例子來說明。嵌入SQL允許程序連接數據庫並且包括SQL代碼到程序中,這樣在程序中就可以對數據庫進行使用、操作以及處理數據等等。以下是用C語言編寫的使用嵌入SQL的例程,它將打印一個報告;這個程序必須在普通的編譯之前先預編譯SQL語句。嵌入SQL對於不同系統是不一樣的,所以在不同的系統中對以下的程序稍作修改,特別是變量的聲明以及過程記錄等。在嵌入SQL時,考慮網絡、數據庫管理系統、操作系統是相當重要的。
以下是詳細的代碼:
#include
/* 以下這部分是聲明主機變量,它將使用於程序中*/
EXEC SQL BEGIN DECLARE SECTION;
int BuyerID;
char FirstName[100], LastName[100], Item[100];
EXEC SQL END DECLARE SECTION;
/* 以下包括SQLCA變量,它可以用來進行錯誤檢查 */
EXEC SQL INCLUDE SQLCA;
main() {
/* 以下連接數據庫*/
EXEC SQL CONNECT UserID/PassWord;
/* 以下是連接數據庫並檢查是否有錯誤產生T */ if(sqlca.sqlcode) {
printf(Printer, "Error connecting to database server.\n");
exit();
}
printf("Connected to database server.\n");
/* 下面聲明一個 "Cursor"。它將在查詢結果多於一行的時候使用*/
EXEC SQL DECLARE ItemCursor CURSOR FOR
SELECT ITEM, BUYERID
FROM ANTIQUES
ORDER BY ITEM;
EXEC SQL OPEN ItemCursor;
/* 你可以在這裡還可以加入另外一些錯誤檢查的內容,這裡就省略了*/
/* 當這個CURSOR沒有數據, sqlcode將被產生以允許我們退出循環。這裡注意,為了簡單起見,我們使程序遇到錯誤的時候就退出任何的sqlcode。*/
EXEC SQL FETCH ItemCursor INTO :Item, :BuyerID;
while(!sqlca.sqlcode) {
EXEC SQL UPDATE ANTIQUES
SET PRICE = PRICE + 5
WHERE ITEM = :Item AND BUYERID = :BuyerID;
EXEC SQL SELECT OWNERFIRSTNAME, OWNERLASTNAME
INTO :FirstName, :LastName
FROM ANTIQUEOWNERS
WHERE BUYERID = :BuyerID;
printf("%25s %25s %25s", FirstName, LastName, Item);
EXEC SQL FETCH ItemCursor INTO :Item, :BuyerID;
}
/* 關閉CURSOR,提交變化並退出程序。*/
EXEC SQL CLOSE DataCursor;
EXEC SQL COMMIT RELEASE;
exit();<