SQL ステートメントを発行する Fortran アプリケーション

SQL ステートメントは、実行可能ステートメントを入れられる 個所であれば、FORTRAN プログラムの任意の場所にコーディング できます。 SQL ステートメントが IF ステートメントの内側にある場合、そのプリコンパイラーは 必要とされるどの THEN と END IF ステートメントも生成します。

FORTRAN ソース・ステートメントは、固定長の 80 バイト・レコードでなければ なりません。 Db2 プリコンパイラーは、フリー・フォーム・ソース入力をサポートしていません。

FORTRAN プログラムの各 SQL ステートメントは、EXEC SQL で開始しなければ なりません。 EXEC および SQL キーワードは 1 行に収めなければなりませんが、 ステートメントの残りの部分は、次行以降になってもかまいません。

例えば、FORTRAN プログラムに UPDATE ステートメントを、 以下のようにコーディングします。

 EXEC SQL
C  UPDATE DSN8C10.DEPT
C  SET MGRNO = :MGRNUM
C  WHERE DEPTNO = :INTDEPT

同一行で、ある SQL ステートメントの後に別 SQL ステートメントまたは FORTRAN ステートメントを コーディングできません。

FORTRAN では、ステートメント内の語を区切るためのブランクは 必要ありませんが、SQL 言語ではブランクが必要です。 組み込み SQL の規則は、SQL 構文の規則に従うので、 区切り文字として 1 つ以上のブランクを使用する必要があります。

コメント
Fortran のコメント行は、ブランクを使用可能な組み込み SQL ステートメント内であれば、どこにでも組み込むことができます。ただし、キーワードの EXEC と SQL の間には組み込めません。 SQL コメントは、どの組み込み SQL ステートメントにも組み込めます。 詳細は、 SQLコメントをご覧ください。

Db2 プリコンパイラーは、Fortranプログラムのコメント認識文字として感嘆符 (!) をサポートしません。

SQL ステートメントの継続
SQL ステートメントの行継続規則は、EXEC SQL は 1 行に収めなければならない点を除いて、Fortran ステートメントの規則と同じです。 このトピックの SQL の 例では、6 桁目に C が書かれており、 これらが EXEC SQL の継続行であることを示しています。
Fortran での区切り文字
Fortran プログラム内のSQLステートメントを、開始キーワードで区切ります。 EXEC SQL

そして、行の終わりまたは最後の継続行の終わり。

表およびビューの宣言
Fortran プログラムにも、そのプログラムがアクセスする各表およびビューを記述する DECLARE TABLE ステートメントを組み込む必要があります。
Fortran プログラムでの動的 SQL
通常、FORTRAN プログラムでは動的 SQL ステートメントの処理が容易です。 SELECT ステートメントは、データ・タイプおよび戻されるフィールド数が決まっている場合に 処理することができます。 変数リストSELECT文を使用する場合は、SQLDAを使用する必要があります。SQL記述領域(SQLDA)の定義で説明されているとおりです。

FORTRAN 文字変数は、固定長の 場合でも、PREPARE および EXECUTE IMMEDIATE ステートメント内で使用できます。

コードの組み込み
区分データ・セットのメンバーから SQL ステートメントまたは FORTRAN ホスト変数宣言を組み込むには、ステートメントを組み込みたいソース・コードの中に、以下の SQL ステートメントをコーディングします。
EXEC SQL INCLUDE member-name

SQL INCLUDE ステートメントはネストできません。 FORTRAN INCLUDE コンパイラー指示は、SQL ステートメント または FORTRAN ホスト変数宣言の組み込みには使用できません。

マージン
7列目から72列目までのSQLステートメントをコード化する。 指定された左マージンの前にEXECSQLが開始された場合、Db2プリコンパイラーはSQLステートメントを認識しません。
名称

ホスト変数には、Fortran で有効な名前であれば、どの名前でも使用できます。 'DSN' で始まる外部入り口名、または 'SQL' で始まるホスト変数名は、 使用しないでください。 これらの名前はDb2のために予約されています。

FORTRAN DEBUG パケットの定義時を除き、DEBUG という語は使用しないで ください。 変数を定義する場合に、FUNCTION、IMPLICIT、PROGRAM、 および SUBROUTINE の語は使用禁止です。

シーケンス番号
Db2 プリコンパイラーに生成されるソース・ステートメントには、シーケンス番号は含まれません。
ステートメント・ラベル
SQL ステートメントのステートメント番号は、1 桁目から5桁目までに指定できます。 ただし、プログラム準備中、ラベル付き SQL ステートメントは、 SQL ステートメントを実行するコードを生成する前に、そのラベルを持つFortranCONTINUEステートメントを生成します。 したがって、ラベル付きの SQL ステートメントは、DO ループ内の 最後のステートメントであってはなりません。 さらに、最初の実行可能 SQL ステートメントの前に現われる SQL ステートメント (INCLUDE およ び BEGIN DECLARE SECTION など) は、ラベルを付けないでください。
WHENEVER ステートメント
SQL WHENEVER ステートメントの GOTO 文節のターゲットは、Fortran ソース・コード内のラベルである必要があり、かつ同じサブプログラム内のステートメントを参照している必要があります。 WHENEVER ステートメントが適用されるは、同じサブプログラムの SQL ステートメントに限られます。
Fortran に関する特殊な考慮事項
以下の考慮事項が、Fortran で作成されるプログラムに適用されます。
  • ソース・コードに、@PROCESS ステートメントを使用することはできません。 代わりに、PARM フィールドにコンパイラー・オプションを指定してください。
  • SQL INCLUDE ステートメントは、PROGRAM、SUBROUTINE、BLOCK、 FUNCTION、または IMPLICIT の各ステートメントの組み込みには使用できません。
Db2 は、以下の制約事項を持つVS Fortran のバージョン 3 リリース 1 (またはそれ以降) をサポートしています。
  • 並列オプションはサポートされません。 SQL ステートメントを含むアプリケーションは、FORTRAN の 並列処理を使用できません。
  • バイト・データ・タイプは、組み込み SQL 内ではサポートされません。 バイトは認識可能なホスト・データ・タイプではありません。
SQL エラー・コードの処理
Fortran アプリケーションは、Db2からSQLエラーに関する詳細情報を請求できます。 詳細については、「CおよびC++アプリケーションでのSQLエラーコードの処理 」を参照してください。