埋め込み SQL プログラムのコンパイル
埋め込み SQL プログラムには SQL ステートメントとホスト言語ステートメントが混在しているため、ホスト言語のコンパイラに直接送信することはできません。 代わりに、マルチステップ プロセスを通じてコンパイルされます。 このプロセスは製品によって異なりますが、ステップはすべての製品でほぼ同じです。
この図は、埋め込み SQL プログラムをコンパイルするのに必要なステップを示しています。
埋め込み SQL プログラムのコンパイルには 5 つのステップがあります。
埋め込み SQL プログラムは、プログラミング ツールである SQL プリコンパイラに送信されます。 プリコンパイラはプログラムをスキャンし、組み込み SQL ステートメントを見つけて処理します。 DBMS でサポートされるプログラミング言語ごとに異なるプリコンパイラが必要です。 通常、DBMS 製品は、C、Pascal、COBOL、Fortran、Ada、PL/I などのさまざまなアセンブリ言語を含む 1 つ以上の言語でプリコンパイラを提供しています。
プリコンパイラは出力ファイルを 2 つ生成します。 1 つ目のファイルはソース ファイルで、埋め込まれた SQL ステートメントは削除されます。 プリコンパイラは、プログラムと DBMS の間のランタイム リンクを提供する独自の DBMS ルーチンの呼び出しを代わりに使用します。 通常、これらのルーチンの名前と呼び出しシーケンスは、プリコンパイラと DBMS にのみ認識されます。これらは DBMS に対するパブリック インターフェイスではありません。 2 つ目のファイルは、プログラムで使用されるすべての埋め込み SQL ステートメントのコピーです。 このファイルは、データベース要求モジュール (DBRM) と呼ばれることもあります。
プリコンパイラからのソース ファイル出力は、ホスト プログラミング言語 (C コンパイラや COBOL コンパイラなど) の標準コンパイラに送信されます。 コンパイラはソース コードを処理し、出力としてオブジェクト コードを生成します。 このステップは、DBMS や SQL とは関係ありません。
リンカーは、コンパイラによって生成されたオブジェクト モジュールを受け入れ、それらをさまざまなライブラリ ルーチンにリンクして、実行可能プログラムを生成します。 実行可能プログラムにリンクされているライブラリ ルーチンには、ステップ 2 で述べた独自の DBMS ルーチンが入っています。
プリコンパイラによって生成されたデータベース要求モジュールは、特殊なバインディング ユーティリティに送信されます。 このユーティリティは、SQL ステートメントを調べ、解析、検証、および最適化した後、各ステートメントのアクセス プランを生成します。 結果は、埋め込み SQL ステートメントの実行可能バージョンを表す、プログラム全体の結合アクセス計画になります。 バインディング ユーティリティは、通常は使用するアプリケーション プログラムの名前を割り当てて、プランをデータベースに格納します。 このステップがコンパイル時に行われるか実行時に行われるかは、DBMS によって異なります。
埋め込み SQL プログラムのコンパイルに使用される手順は、「sql ステートメントの処理で説明した手順と非常に密接に関連していることに注意してください。 特に、プリコンパイラが SQL ステートメントをホスト言語コードから分離し、バインディング・ユーティリティが SQL ステートメントを解析して検証し、アクセス プランを作成していることに注意してください。 ステップ 5 がコンパイル時に行われる DBMS では、SQL ステートメントを処理する最初の 4 つのステップはコンパイル時に行われ、最後のステップ (実行) は実行時に行われます。 これは、このような DBMS でのクエリ実行を非常に高速にする効果があります。