DIALECT 文のプレフィックスにより、DB2 から SQL Server への変換の詳細を、DB2 構文に準拠する SQL Server 文など個別の EXEC SQL 文に対して指定できます。これにより、修飾されていないテーブルやビューの修飾など、特定のオーバーライドおよび変換ルーチンを必要に応じて DB2 に互換性のある SQL Server 文に適用できます。
時間が経つにつれ、移行したアプリケーションは DB2 でなく SQL Server に特有の構文を使用するように変化します。DIALECT=MAINFRAME コンパイラ指令オプションを使用してアプリケーションをコンパイルする場合、デフォルトでは HCOSS はすべての文が DB2 文であることを前提にして、定義済みの HCOSS データ型マッピング、SQL 名マッピング、SQLCODE マッピングによってもたらされる仕様を使用してそれらの文を SQL Server 文に変換します。また HCOSS は、SQL(QUALIFIER) コンパイラ指令オプションを使用するか、BIND PACKAGE または BIND PLAN コマンドの QUALIFIER パラメーターを使用することで、修飾されていないテーブルおよびビューに修飾子を適用します。さらに HCOSS はデフォルトで既存の SQL Server 文を変換せず、それらを SQL Server データベースに直接サブミットします。
DIALECT=MIXED を使用してコンパイルする際に、上記の変換は [MAINFRAME] プレフィックスをともなう文に対してのみ実行され、HCOSS はデフォルトですべての文が SQL Server 文であることを前提にします。
DIALECT=MAINFRAME と DIALECT=MIXED のどちらを選択するかは、大半の文を DB2 文または SQL Server 文のどちらとして処理する必要があるかによります。
EXEC SQL [statementPrefix]... SQLStatement END-EXEC
文プレフィックスは DIALECT コンパイラ指令オプションとともに使用する必要があります。
次の例はいずれも、DIALECT が MAINFRAME または MIXED に設定され、すべての SQLStatement が DB2 互換であることを前提にします。
例 1
QUALIFIER コンパイラ指令オプションは設定されておらず、指定済みの QUALIFIER パラメーターはありません。
EXEC SQL [NOPLAN] SQLStatement END-EXEC
SQLStatement は変換されますが、HCOSS によって修飾されません。DBRM に書き込まれず、BIND コンパイラ指令オプションが設定されていてもバインド スクリプト ファイルに書き込まれません。また ACCESS コンパイラ指令オプションが設定されていてもコンパイル時にストアド プロシージャを作成するために使用されません。
例 2
QUALIFIER コンパイラ指令オプションが設定されています。
EXEC SQL [MAINFRAME] SQLStatement END-EXEC
SQLStatement は、HCOSS によって変換および修飾されます。
例 3
QUALIFIER コンパイラ指令オプションが設定されています。
EXEC SQL [NOPLAN][MAINFRAME] SQLStatement END-EXEC
SQLStatement は HCOSS によって変換および修飾されますが、DBRM に書き込まれません。
例 4
QUALIFIER コンパイラ指令オプションが設定されています。
EXEC SQL [NODIALECT] SQLStatement END-EXEC
SQLStatement は、HCOSS によって変換も修飾もされません。
例 5
BIND または DBRMLIB コンパイラ指令が QUALIFIER コンパイラ指令とともに設定されます。
EXEC SQL [NOPLAN][NODIALECT] SQLStatement END-EXEC
SQLStatement は HCOSS によって変換も修飾もされず、バインド ファイルまたは DBRM に書き込まれません。