SQLコマンドの実行では、埋め込みSQLプログラムでどのようにSQL文を実行するのかについて説明しました。このSQL文の中には固定値しか使用しないものや、ユーザが指定する値をSQL文の中に挿入する手段を提供しないもの、問い合わせが返す値をプログラムで処理する手段を提供しないものがありました。この種のSQL文は実際のアプリケーションでは役に立ちません。本節では、ホスト変数という単純な機構を使用した、Cプログラムと埋め込みSQL文との間でデータをやり取りする方法を詳細に説明します。埋め込みSQLプログラムでは、SQL文をホスト言語となるCプログラムコードにおけるゲストとみなします。したがって、Cプログラムの変数はホスト変数と呼ばれます。説明されているSQLデスクリプタを使う方法です。埋め込みSQLにおけるCプログラムとSQL文との間でのデータのやり取りは特に単純です。値に適切な引用符を付与するといった、様々な複雑な処理を伴う、プログラムにデータを文中に貼り付けさせるという方法はなく、単にSQL文の中に、先頭にコロンを付けたC変数名を書くだけです。:v2);このSQL文は、v1とv2という2つのC変数を参照し、また、通常のSQL文字列リテラルも使用しています。これは、使用できるデータの種類は1つだけという制限がないことを表しています。SQL文内にCの変数を挿入するこの様式は、SQL文で値式が想定されている所であればどこでも動作します。宣言セクション例えば問い合わせ内のパラメータとして、プログラムからデータベースへデータを渡す、もしくは、データベースからプログラムへデータを渡すためには、このようなデータを含むように意図されたC変数を、埋め込みSQLプリプロセッサが管理できるように、特殊な印のついたセクションで宣言する必要があります。このセクションは以下で始まります。SECTION;そして、以下で終わります。SECTION;この行の間は、以下のような通常のC変数宣言でなければなりません。bar[16];見てわかるとおり、省略可能ですが、変数に初期値を代入することができます。変数のスコープはプログラム内の宣言セクションの場所により決まります。以下のような暗黙的に宣言セクションを生成する構文を使って変数を宣言することもできます。4;プログラム内に複数の宣言セクションを持たせることができます。宣言は普通のC変数としてそのまま出力ファイルに出力されます。これらを再度宣言する必要はありません。通常、SQLコマンドで使用する予定がない変数はこの特別なセクションの外側で宣言されます。構造体や共用体の定義もまた、DECLAREセクションの内側で表す必要があります。ないと、プリプロセッサはその定義が不明であるために、これらの型を扱うことができません。クエリ実行結果の受け取りここまでで、プログラムで生成したデータをSQLコマンドに渡すことができるようになりました。この目的のために、埋め込みSQLでは、通常のSELECTとFETCHを派生した、特殊なコマンドを提供しています。これらのコマンドは特別なINTO句を持ち、ここで返された値をどのホスト変数に格納すればよいかを指定します。複数の行を返却する問い合わせにおいてカーソルととともに使用されます。以下にサンプルを示します。test;INTO句が選択リストとFROM句の間に現れます。選択リスト内の要素数とINTO直後のリスト(目的リストとも呼ばれます)の要素数は等しくなければなりません。以下にFETCHコマンドの使用例を示します。(...);ここでは、INTO句が通常のすべての句の後ろに現れています。データ型の対応ECPGアプリケーションがPostgreSQLバックエンドとCアプリケーションの間で値をやり取りする際、例えばサーバからクエリの結果を受け取る、または入力パラメータとともにSQL文を実行する場合、それらの値はPostgreSQLのデータ型とホスト言語の変数の型(具体的にはC言語のデータ型)の間で変換される必要があります。ECPGの重要な点のひとつは、ほとんどの場合においてECPGがこれらを自動的に扱うということです。アプリケーションから直接読んだり書いたりすることができます。表34.1「PostgreSQLデータ型とC言語変数型の対応」には、PostgreSQLのどのデータ型がC言語のデータ型に対応するかが示されています。与えられたPostgreSQLのデータ型へ値を書き込みまたは読み込みしたい場合には、対応するC言語のデータ型の変数を宣言セクションにおいて宣言しなければなりません。