方法2、3および4では、次の文を使用することが必要な場合があります。
EXEC SQL [AT db_name] DECLARE statement_name STATEMENT;
db_nameおよびstatement_nameは、プリコンパイラで使用される識別子で、ホスト変数でもプログラム変数でもありません。
DECLARE
STATEMENT
は、PREPARE
、EXECUTE
、DECLARE
CURSOR
およびDESCRIBE
が文を参照できるように、動的SQL文の名前を宣言します。デフォルト以外のデータベースで動的SQL文を実行する場合は必須です。方法2を使用する例を次に示します。
EXEC SQL AT remote_db DECLARE sql_stmt STATEMENT; EXEC SQL PREPARE sql_stmt FROM :sql_string; EXEC SQL EXECUTE sql_stmt;
この例では、remote_dbによって、SQL文をどこでEXECUTE
するかをOracleに指示します。
方法3および方法4では、次の例に示すように、DECLARE CURSOR
文がPREPARE文の前にある場合にもDECLARE
STATEMENT
が必要です。
EXEC SQL DECLARE sql_stmt STATEMENT; EXEC SQL DECLARE emp_cursor CURSOR FOR sql_stmt; EXEC SQL PREPARE sql_stmt FROM :sql_string;
一般的な文の順序は次のとおりです。
EXEC SQL PREPARE sql_stmt FROM :sql_string; EXEC SQL DECLARE emp_cursor CURSOR FOR sql_stmt;
ホスト配列の使用方法は、静的SQLでも動的SQLでも同様です。たとえば、動的SQL方法2で入力ホスト配列を使用するには、次の構文を使用します。
EXEC SQL EXECUTE statement_name USING host_array_list;
host_array_listには1つ以上のホスト配列が含まれます。方法3の場合は、次の構文を使用します。
OPEN cursor_name USING host_array_list;
方法3で出力ホスト配列を使用するには、次の構文を使用します。
FETCH cursor_name INTO host_array_list;
方法4では、オプションのFOR句を使用して、入力ホスト配列または出力ホスト配列のサイズをOracleに指示する必要があります。この方法は、ホスト言語の補足資料を参照してください。