埋め込みSQLプログラムは通常のプログラミング言語(ここではCOBOL)で記述されたコードで、特別にマークされたセクション内のSQLコマンドとともに使用されます。 このプログラムを構築するには、まずソースコード (*.pco) を埋め込みSQLプリプロセッサに渡します。 ソースコードは、プリプロセッサによって通常のCOBOLプログラム (*.cob) に変換され、その後COBOLコンパイラによって処理されます。(コンパイルとリンクの詳細については “D.9 埋め込みSQLプログラムの処理”を参照してください) 変換されたECOBPGアプリケーションは、libpqライブラリにある関数を埋め込みSQLライブラリ (ecpglib) を介して呼び出し、通常のフロントエンド・バックエンドプロトコルを使ってPostgreSQLサーバと通信します。
COBOLコードからSQLコマンドを扱う場合は、埋め込みSQLの方が他の手法よりも有効です。 まず、埋め込みSQLはCOBOLプログラムの変数との面倒な双方間の情報移行を処理してくれます。 さらに、プログラム内のSQLコードは構築時に正確な構文になっているかどうか検査されます。 また、COBOLでの埋め込みSQLは標準SQLで既に定義されており、他の様々なSQLデータベースシステムでサポートされています。 PostgreSQLの実装は可能な限りこの標準に準拠するよう設計されています。 また通常の場合、他のSQLデータベース用に作成された埋め込みSQLプログラムを比較的簡単にPostgreSQLへ移植することができます。
先に述べた通り、埋め込みSQLインタフェース用のプログラムは、通常のCOBOLプログラムに、データベース関連処理を行うための特別なコードを加えたものです。 この特別なコードは、常に、次のような形式になっています。
EXEC SQL ... END-EXEC
このSQL文は、構文上でCOBOLの文の置き換えとなります。 SQL文によりますが、データ部、または手続き部で記述することができます。実際の実行を伴うSQL文は手続き部で記述する必要があり、ホスト変数の宣言はデータ部で記述する必要がありますが、プレコンパイラでは正しい部、節に記述されているかは判定しません。 埋め込みSQL文における大文字小文字の区別の有無は、COBOLコードではなく、通常のSQLコードの規則に従います。
COBOLコードの記法には固定形式または可変形式が使用できます。各行の6カラム目までは行番号領域、7カラム目は標識領域となります。また、埋め込みSQLコードはB領域(12カラム目以降)に位置している必要があります。
ただし、本マニュアル内のサンプルコードは行番号や領域のためのインデントを省略しています。
ECOBPGは、COBOLコードの記法に従って処理およびプログラムの出力を行います。COBOLコードの記法はecobpgコマンドで指定します。ただし、以下の制限があります。
固定形式の場合、12カラムから72カラムがB領域になります。73カラム以降の文字はプレコンパイルされたソースでは削除されます。
可変形式の場合、12カラムからそのレコードの最後(最大251カラム)までがB領域になります。252カラム以降の文字はプレコンパイルされたソースでは削除されます。
ECOBPGはCOBOLの文を可能な限り受け入れます。しかし、以下の制限があります。
ホスト変数を宣言するセクションでは、デバッグ行を使用できません。
ホスト変数を宣言するセクション以外では、デバッグ行を使用できますが、デバッグ行の中にSQLは使用できません。
ホスト変数を宣言するセクションでは、区切り文字としてコンマやセミコロンを使用できません。代わりにスペースを使用してください。
EcpgでサポートされているEXEC SQL VAR コマンドは、ECOBPGでは使用できません。代わりに、COBOLのREDEFINE句を使用してください。
以下の節で、すべての埋め込みSQL文について説明します。