埋め込みSQLプログラムは通常のプログラミング言語(ここではC)で記述されたコードで、特別にマークされたセクション内のSQLコマンドとともに使用されます。
このプログラムを構築するには、まずソースコード (*.pgc
) を埋め込みSQLプリプロセッサに渡します。
ソースコードは、プリプロセッサによって通常のCプログラム (*.c
) に変換され、その後Cコンパイラによって処理されます。
(コンパイルとリンクの詳細については 36.10 を参照してください。)
変換されたECPGアプリケーションは、libpqライブラリにある関数を埋め込みSQLライブラリ (ecpglib) を介して呼び出し、通常のフロントエンド・バックエンドプロトコルを使ってPostgreSQLサーバと通信します。
CコードからSQLコマンドを扱う場合は、埋め込みSQLの方が他の手法よりも有効です。 まず、埋め込みSQLはCプログラムの変数との面倒な双方間の情報移行を処理してくれます。 さらに、プログラム内のSQLコードは構築時に正確な構文になっているかどうか検査されます。 また、C言語での埋め込みSQLは標準SQLで既に定義されており、他の様々なSQLデータベースシステムでサポートされています。 PostgreSQLの実装は可能な限りこの標準に準拠するよう設計されています。 また通常の場合、他のSQLデータベース用に作成された埋め込みSQLプログラムを比較的簡単にPostgreSQLへ移植することができます。
先に述べた通り、埋め込みSQLインタフェース用のプログラムは、通常のCプログラムに、データベース関連処理を行うための特別なコードを加えたものです。 この特別なコードは、常に、次のような形式になっています。
EXEC SQL ...;
このSQL文は、構文上でC言語の文の置き換えとなります。 SQL文によりますが、グローバルレベル、または関数内で記述することができます。
埋め込みSQL文における大文字小文字の区別の有無は、Cコードではなく、通常のSQLコードの規則に従います。
また、SQL標準に従い入れ子のC形式のコメントを許します。
しかし、プログラムのCの部分では、入れ子のコメントを受け付けないというC標準に従います。
同様に、埋め込みSQL文は引用符付きの文字列や識別子の解析に、Cの規則ではなく、SQLの規則を使います。
(それぞれ4.1.2.1と4.1.1を参照してください。
ECPGはstandard_conforming_strings
がon
であることを仮定することに注意してください。)
もちろん、プログラムのCの部分では、Cの引用の規則に従います。
以下の節で、すべての埋め込みSQL文について説明します。