Chapter 29. ecpg - 在 C 裡嵌入 SQL

Table of Contents
29.1. 概念
29.2. 與資料庫伺服器連接
29.3. 關閉連接
29.4. 執行 SQL 命令
29.5. 選取一個連接
29.6. 使用宿主變量
29.6.1. 概述
29.6.2. 聲明段
29.6.3. SELECT INTOFETCH INTO
29.6.4. 指示器
29.7. 動態 SQL
29.8. 使用 SQL 描述符範圍
29.9. 錯誤處理
29.9.1. 設置回調
29.9.2. sqlca
29.9.3. SQLSTATESQLCODE 之比較
29.10. 頭文件
29.11. 處理嵌入的 SQL 程序
29.12. 庫函數
29.13. 內部

這章描寫一種用於 PostgreSQL 的嵌入SQL包。它是由 Linus Tolke ()和 Michael Meskes ()寫的。 最初它是為了在 C 裡面使用書寫的。它也可以用於 C++, 但是它還不能識別所有 C++ 構造。

這份文件相當不完整。但是因為這個接口是標準,所以我們可以在有關 SQL 的資源裡找到許多額外的訊息。

29.1. 概念

嵌入 SQL 程序主要由一種普通的編程語言代碼組成,在我們這個場合中是 C, 並且在其中與一些特殊標記的段混合。要製作這樣的程序,原始碼首先經過嵌入的 SQL 預處理器處理,它把原始碼轉換成普通的 C 程序, 然後這個程序可以用 C 編譯器進行處理。

嵌入的 SQL 相比於其它的從 C 代碼中處理 SQL 命令的優點有幾條。首先,它替您照看那些從您的 C 程序中的變量中傳來傳去數值的事情。 第二,在 C 代碼裡嵌入 SQL 是定義在 SQL 標準裡的,並且被許多其它的 SQL 資料庫支援。 PostgreSQL 的實現被設計成盡可能匹配這個標準, 並且通常可以把為其它 SQL 資料庫書寫的 SQL 移植到 PostgreSQL 中來,反之亦然。

如上所述,為嵌入 SQL 接口寫的程序通常是帶著插入進來的特殊代碼的 C 程序, 這些特殊代碼用於執行與資料庫相關的動作。這些特殊代碼通常的形式是下面這樣:

EXEC SQL ...;

這些語句語法上佔據 C 語句的位置。根據具體語句的不同,它們可以出現在全局環境中或者出現在一個函數里。 嵌入的 SQL 語句遵循普通 SQL 代碼的大小寫敏感規則,而不是遵循 C 代碼的。

下面的小節都是用來解釋所有的嵌入 SQL 語句的。