4.19.1 EXECUTE文 形式1の形式と規則
(1) 機能
PREPARE文で前処理したSQLを実行します。
(2) 使用権限
なし。
(3) 形式1 <前処理したSQL文の実行>
EXECUTE {SQL文識別子|拡張文名} 〔{INTO :埋込み変数〔:標識変数〕 〔,:埋込み変数〔:標識変数〕〕… |INTO DESCRIPTOR 〔:〕SQL記述領域名 〔CHARACTER_SET〔:〕文字集合名記述領域名〕}〕 〔{USING :埋込み変数〔:標識変数〕 〔,:埋込み変数〔:標識変数〕〕… |USING DESCRIPTOR 〔:〕SQL記述領域名 〔CHARACTER_SET〔:〕文字集合名記述領域名〕}〕
(4) オペランド
(a) {SQL文識別子|拡張文名}
- SQL文識別子
-
PREPARE文で前処理したSQLに付けられたSQL文識別子を指定します。
- 拡張文名
-
PREPARE文で前処理したSQL文を識別する拡張文名を指定します。
拡張文名については,「拡張文名」を参照してください。
(b) INTO:埋込み変数〔:標識変数〕〔,:埋込み変数〔:標識変数〕〕…
- 埋込み変数
-
PREPARE文で前処理した1行SELECT文の検索結果を受け取る場合,又はPREPARE文で前処理したCALL文に出力?パラメタが含まれる場合,その値を埋込み変数で受け取るときに,その検索結果の列の値,又は出力?パラメタを受け取る埋込み変数を指定します。
- 標識変数
-
埋込み変数に返される検索結果の列,又は出力パラメタの値がナル値かどうかを示す値が返される標識変数を指定します。
標識変数は,SMALLINTのデータ型を持つ埋込み変数として,埋込みSQL宣言節で宣言してください。
標識変数を省略した場合は,ナル値を受け取れません。
(c) INTO DESCRIPTOR〔:〕SQL記述領域名〔CHARACTER_SET〔:〕文字集合名記述領域名〕
- SQL記述領域名
-
PREPARE文で前処理した1行SELECT文の検索結果,又はCALL文の出力?パラメタの値をSQL記述領域を用いて受け取るときに,その検索結果の列の値,又は出力?パラメタの値を受け取るための変数を記述したSQL記述領域の名称を指定します。
- 文字集合名記述領域名
-
PREPARE文で前処理した1行SELECT文の検索結果,又はCALL文の出力?パラメタの値をSQL記述領域を用いて受け取るときに,その検索結果の列の値,又は出力?パラメタの値を受け取るための変数の文字集合名を記述した文字集合名記述領域の名称を指定します。
文字集合名記述領域については,マニュアル「HiRDB UAP開発ガイド」を参照してください。
(d) USING:埋込み変数〔:標識変数〕〔,:埋込み変数〔:標識変数〕〕…
- 埋込み変数
-
PREPARE文で前処理したSQLに入力?パラメタが含まれる場合,その値を埋込み変数で与えるときに,その入力?パラメタに与える値を持つ埋込み変数を指定します。
USING句で指定する埋込み変数の数と,EXECUTE文で実行するSQLに含まれる入力?パラメタの数を同じにしてください。なお,埋込み変数と入力?パラメタは,それぞれ並びの順に先頭から対応付けられます。
USING句で指定する埋込み変数のデータ型は,対応する入力?パラメタに対して許されるデータ型にしてください。
- 標識変数
-
埋込み変数の値がナル値かどうかを示す標識変数を指定します。
標識変数は,SMALLINTのデータ型を持つ埋込み変数として,埋込みSQL宣言節で宣言してください。
標識変数を省略した場合は,埋込み変数の値はナル値以外と仮定されます。
(e) USING DESCRIPTOR〔:〕SQL記述領域名〔CHARACTER_SET〔:〕文字集合名記述領域名〕
- SQL記述領域名
-
PREPARE文で前処理したSQLに入力?パラメタが含まれる場合,その値をSQL記述領域で与えるときに,その入力?パラメタの情報を格納したSQL記述領域名を指定します。
- 文字集合名記述領域名
-
PREPARE文で前処理したSQLの入力?パラメタの値を,SQL記述領域を用いて与えるときに,その入力?パラメタの値を与えるための変数の文字集合名を記述した文字集合名記述領域の名称を指定します。
文字集合名記述領域については,マニュアル「HiRDB UAP開発ガイド」を参照してください。
(5) 共通規則
-
EXECUTE文で実行するSQLは,PREPARE文で前処理しておく必要があります。
-
PREPARE文とそのPREPARE文で前処理したSQLを実行するEXECUTE文は,同じトランザクション内で実行してください。
-
SQL文識別子は,埋込み変数と同様に,コンパイル単位のファイル内で有効な名前であり,同じSQL文識別子に対する複数のSQLを,複数のモジュールにわたって使用できません。
-
INTO句で指定する埋込み変数の数と,EXECUTE文で実行する1行SELECT文の検索結果の列の数,又はCALL文の出力?パラメタの数を同じにしてください。実行するSQLが1行SELECT文の場合,埋込み変数の数と,列の数が同じでないときは,SQL連絡領域のSQLWARN3領域に警告フラグ”W”が設定されます。なお,埋込み変数と検索結果の列,又は埋込み変数と出力?パラメタは,それぞれ並びの順に先頭から対応付けられます。
-
INTO句で指定する埋込み変数のデータ型は,対応する検索結果の列,又は出力?パラメタに対して許されるデータ型にしてください。
-
INTO句で指定する固定長文字列(各国文字列,及び混在文字列を含む)の埋込み変数に取り出すデータが,その埋込み変数の定義長より短い場合は,左詰めに挿入され,余りの部分に空白が設定されます。
-
検索結果の列の値又はCALL文の出力?パラメタの値がナル値の場合,対応する埋込み変数の値は保証しません。
-
INTO句に指定した埋込み変数が既定文字集合の文字データ型でかつ,検索結果の列又はCALL文の出力?パラメタの文字集合が異なる文字データ型の場合,自動的に埋込み変数の文字集合に変換します。
-
USING句に指定した埋込み変数が既定文字集合の文字データ型で,かつ入力?パラメタの文字集合と異なる場合,自動的に入力?パラメタの文字集合に変換します。
(6) 留意事項
-
PREPARE文で前処理した一つのSQLに対して,EXECUTE文は,何回でも実行できます。
-
SQL記述領域の設定内容については,マニュアル「HiRDB UAP開発ガイド」を参照してください。
(7) 使用例
-
PREPARE文で前処理したSQL(SQL文識別子:PRESQL)を実行します。ただし,PRESQLの?パラメタに値を与える埋込み変数(HATENA)を指定します。
EXECUTE PRESQL USING :HATENA
-
PREPARE文で前処理したSQL(SQL文識別子:PRESQL)を実行します。ただし,PRESQLの?パラメタに値を与える情報を格納したSQL記述領域(SQLDA)を指定します。
EXECUTE PRESQL USING DESCRIPTOR SQLDA
-
PREPARE文で前処理したSQL(SQL文識別子:PRESQL)を実行します。
CALL PROC1(?,?,?)
ただし,手続きPROC1の第1SQLパラメタのパラメタモードをIN,第2SQLパラメタのパラメタモードをINOUT,第3SQLパラメタのパラメタモードをOUTとします。また,第1SQLパラメタに対しては埋込み変数XPARAM1,第2SQLパラメタに対しては埋込み変数XPARAM2,第3SQLパラメタに対しては埋込み変数XPARAM3を指定します。
EXECUTE PRESQL INTO :XPARAM2,:XPARAM3 USING :XPARAM1,:XPARAM2