本節では、内部的なECPGの動作を説明します。この情報はECPGの使用方法を理解する手助けとして有用なことがあります。ecpgによって出力に書き込まれる最初の4行は固定されています。2行はコメントで、残り2行はライブラリとのインタフェースのために必要なインクルード行です。その後、プリプロセッサはファイル全体を読み取り、出力に書き出します。通常は、単に全てそのまま出力に書き出します。SQLを検出すると、間に入り、それを変更します。SQLで始まり、;で終わります。この間の全てはSQL文として扱われ、変数の置換のために解析されます。変数置換は、シンボルがコロン(:)から始まる場合に発生します。DECLAREセクションで事前に宣言された変数の中から検索されます。ライブラリ内で最も重要な関数はECPGdoです。これが、ほとんどのコマンドの実行を管理します。引数の変数番号をとります。全てのプラットフォームで問題にならないことを祈っていますが、これは50程度の引数まで簡単に追加できます。引数を以下に示します。エラーメッセージ内でのみ使用されます。発行すべきSQLコマンドです。入力変数、つまり、コンパイル時に未知だったがそのコマンド内に与えるべき変数によって変更されます。変数が文字列内に挿入される箇所は?となっています。個の引数を受けます(後述)。ECPGt_EOIT入力変数がもうないことを表すenumです。個の引数を受けます(後述)。これらの変数は関数で埋められています。ECPGt_EORT変数がもうないことを表すenumです。SQLコマンドの一部となる全ての変数用に、この関数は以下の10個の引数を受け取ります。特別シンボルとしての型。値へのポインタ、もしくはポインタのポインタ。変数がcharかvarcharの場合はそのサイズ。配列の要素数(配列取り出し用)。配列の次の要素のオフセット(配列取り出し用)。特別シンボルとしての指示子変数の型。指示子変数へのポインタ。0指示子配列内の要素数(配列取り出し用)。指示子配列内の次要素へのオフセット(配列取り出し用)。全てのSQLコマンドがこの方法で扱われるわけではないことに注意してください。以下のカーソルを開く文は出力にコピーされません。cursor;その代わりにカーソルのDECLAREコマンドがOPENコマンドの場所で使用されます。実際にこのコマンドがカーソルを開くからです。(プリプロセッサのバージョンによって詳細が異なっているかもしれません)。:index;これは以下に翻訳されます。"foo.pgc"ここで可読性のためにインデントを付けています。プリプロセッサが行ったものではありません。