允許主機語言(如 C)程式連接資料庫、內嵌 SQL 程式碼,直接操作資料。編譯前須經預處理器轉換 SQL 陳述式。語法細節隨 DBMS、網路、作業系統而異。
#include <stdio.h>
/* 宿主變數宣告區 */
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;
if (sqlca.sqlcode) {
printf("Error connecting to database server.\n");
exit(1);
}
printf("Connected to database server.\n");
/* 宣告游標:依物品排序 */
EXEC SQL DECLARE ItemCursor CURSOR FOR
SELECT ITEM, BUYERID FROM ANTIQUES ORDER BY ITEM;
EXEC SQL OPEN ItemCursor;
/* 擷取第一筆 */
EXEC SQL FETCH ItemCursor INTO :Item, :BuyerID;
/* 迴圈處理每一筆 */
while (!sqlca.sqlcode) {
/* 漲價 5 元 */
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;
}
/* 收尾 */
EXEC SQL CLOSE ItemCursor;
EXEC SQL COMMIT RELEASE;
exit(0);
}
| 區塊 | 用途 |
|---|---|
BEGIN/END DECLARE SECTION | 宣告供 SQL 使用的主機變數(加冒號 :var 參考) |
INCLUDE SQLCA | 引入 sqlca.sqlcode 等錯誤狀態變數 |
CONNECT | 建立資料庫連線 |
DECLARE CURSOR | 定義結果集游標(多列結果必須) |
OPEN/FETCH/CLOSE | 游標生命週期控制 |
COMMIT RELEASE | 提交交易並釋放連線 |
EXEC SQL 後檢查 sqlca.sqlcode