次のSQL文について考えます。
SELECT ename, empno FROM emp WHERE deptno = :deptno_data
ANSI動的SQLを使用する手順は、次のとおりです。
実行する文を格納する文字列などの変数を宣言します。
入力変数および出力変数に記述子を割り当てます。
文を準備します。
入力記述子の入力を記述します。
入力記述子を設定します(この例では1つの入力ホスト・バインド変数deptno_data
)。
動的カーソルを宣言およびオープンします。
出力記述子(上の例の出力ホスト変数は、ename
およびempno
)を設定します。
ename
およびempno
データ・フィールドを各行から取り出すために、GET DESCRIPTORを使用してデータを繰り返しフェッチします。
取り出したデータを処理します(出力など)。
動的カーソルを閉じ、入力記述子および出力記述子への割当てを解除します。
マイクロ・プリコンパイラ・オプションDYNAMICをANSIに設定するか、マクロ・オプションMODEをANSIに設定してください。これにより、DYNAMICのデフォルト値がANSIに設定されます。DYNAMICのもう1つの設定はORACLEです。
ANSI型コードを使用するには、TYPE_CODEプリコンパイラ・マイクロ・オプションをANSIに設定するか、MODEマクロ・オプションをANSIに設定します。これにより、TYPE_CODEのデフォルト設定がANSIに変更されます。TYPE_CODEをANSIに設定するには、DYNAMICもANSIに設定する必要があります。
表14-1に記載されているANSI SQL型のOracleによる実装は、ANSI規格と完全には一致していません。たとえば、INTEGERとして宣言された列の記述では、NUMERICのコードが戻されます。OracleをANSI規格に近づけると、動作にわずかな変更が必要になる場合があります。使用中のアプリケーションをデータベース・プラットフォーム間で移植できるようにして、可能なかぎりANSI準拠にする場合、TYPE_CODEプリコンパイラ・オプションを設定したANSI型を使用してください。このような変更ができない場合は、TYPE_CODEをANSIに設定しないでください。