EXEC SQL

EXEC SQL オンライン・ユーティリティー制御ステートメントは、カーソルの宣言、または動的 SQL ステートメントの実行を行います。 このユーティリティーは、LOAD ユーティリティーの Db2 クロスローダー機能の一部として使用することができます。

クロスローダー機能は、単一の LOAD ジョブを使用して、1 つのロケーションから別のロケーション へ、または同一ロケーションの 1 つの表から別の表へ、データを転送することを可能にします。 表にデータを追加するための入力ソースとしては、ローカル・サーバーまたは DRDA 準拠の任意の リモート・サーバーのいずれも使用することができます。 入力は、他のソースからも可能です。 Db2 for z/OS®。 IBM® 情報統合機能を使用して、 Oracle や Sybase などの多様なソースからのデータにアクセスできます。また、 Db2 データベースサーバーのファミリー全体に

重要: 変更の開始DSNUTIL を DBPROTOCOL(DRDACBF) と結合すると、EXEC SQL を使用してデータを変更するリモート動的 SQL 文を発行することはできません。EXEC SQL を使用できるのはカーソルの宣言のみで、LOAD を使用して更新を行うことができます。変更の終わり

出力

EXEC SQL 制御ステートメントは、 カーソルが指定されている場合、結果表を生成します。

必要な許可

EXEC SQL ステートメント自体は、 実行するための特権を何も必要としません。 EXECUTE IMMEDIATE によって 指定された、SQL ステートメントの動的準備のために定義された許可規則が適用されます。

EXEC SQL の実行フェーズ

EXEC SQL 制御ステートメントの実行全体が EXEC フェーズで行われます。 必要な場合は、EXEC フェーズを再始動することができます。

EXEC SQL の並行性と互換性

EXEC SQL 制御ステートメントは、表スペースに対して並行 SQL アクセスが可能などのユーティリティー とでも一緒に使用することができます。 他のデータベースに影響を及ぼすことはありません。

変更の開始

EXEC SQL文の数に関する制限

ただし、 Db2 1つの入力ストリーム(SYSIN)に含めることができるEXEC SQL文の数を制限するものではありませんが、あまりに多くの文を実行すると、利用可能なリソースによっては、失敗や長時間のジョブ実行につながる可能性があります。 例えば、数千ものEXEC SQL文を実行すると、許容できないほどの時間がかかったり、失敗したりすることがあります。

変更の終わり

EXEC SQL 構文

制御ステートメントは、ISPF/PDF 編集機能を使って作成することができます。 制御ステートメントを作成した後、それを順次データ・セットまたは区分データ・セットに 保管します。 ジョブを実行するための JCL を作成するときは、SYSIN DD ステートメントを使用して、ユーティリティー 制御ステートメントを格納するデータ・セットの名前を指定してください。

UNICODE でサブミット されたユーティリティー制御ステートメント (EXEC SQL も含む) は、処理の前に EBCDIC に 変換されます。ただし、文字ストリング定数は変換されません。 文字ストリング定数は、指定されたときの文字セットの ままにされます。 場合によっては、必要な動作を得るために、16 進数ストリング定数を使用する必要が生じることがあります。

構文図を読むビジュアルシンタックスダイアグラムをスキップする EXEC SQL DECLAREcursor-nameCURSORFORselect-statement非選択動的SQL文 ENDEXEC

オプションの説明

cursor-name
カーソル名を指定します。 この名前は、同じ入力ストリーム内で既に宣言されている カーソルを示すものであってはなりません。 DB2 クロスローダー機能を使用して、リモート・サーバー からデータをロードする場合は、3 部構成の名前でカーソルを指定する必要があり ます。 EXEC SQL ユーティリティーで指定する名前の長さは、8 文字を越えてはなりま せん。
select文
カーソルの結果表を指定します。 このステートメントには、結合、和集合、変換、集約、 特殊レジスター、およびユーザー定義関数を含め、任意の有効な SQL SELECT ステートメントを 指定できます。
非選択動的 SQL ステートメント
EXECUTE IMMEDIATE への入力として使用される動的 SQL ステートメントを指定します。 ユーティリティー・ステートメントでは、以下の動的 SQL ステートメントを指定できます。
  • ALTER
  • COMMENT ON
  • COMMIT
  • CREATE
  • DELETE
  • DROP
  • EXPLAIN
  • GRANT
  • INSERT
  • LABEL ON
  • RENAME
  • REVOKE
  • SET CURRENT DEGREE
  • SET CURRENT SQLID
  • UPDATE

それぞれの SQL ステートメントは、独立したスレッドとして実行します。 ユーティリティーが SQL ステートメント を実行するときには、指定されたステートメント・ストリングが 構文解析され、エラーの有無が検査されます。 SQL ステートメントが無効の場合は、EXEC SQL はこのステートメントを実行せず、エラー条件 を報告します。 SQL ステートメントは有効でも、実行中にエラーが発生した場合は、EXEC SQL は そのエラー条件を報告します。 エラーが発生した場合は、ユーティリティーは終了します。

EXEC SQL の終了または再始動

EXEC SQL ユーティリティー・ジョブをサブミットした場合、あるいは、SYSOPR、SYSCTRL、または SYSADM の 権限を持っている場合は、そのジョブを TERM UTILITY コマンドで終了させることができます。

EXEC SQL ユーティリティー・ジョブを再始動することはできますが、 最初からやり直すことになります。 EXEC SQL は正常完了し、その後続のユーティリティーが失敗した場合に、より大きなジョブの一部としてこのユーティリティーを再始動しようとする場合は、可能であれば、EXEC SQL ユーティリティー制御ステートメントを変更しないでください。 EXEC SQL ユーティリティー制御ステートメントを変更する必要がある場合は、 慎重に行ってください。どんな変更でも再始動処理が失敗する原因になる可能性があります。

例 1: 表を作成する

次の制御ステートメント は、DB2 が サンプル表 EMP と同じ行と列を持つ表 MYEMP を作成する指定を行っています。

汎用プログラミングインターフェース情報の開始。
EXEC SQL
  CREATE TABLE MYEMP LIKE DSN8C10.EMP CCSID EBCDIC
ENDEXEC
汎用プログラミングインターフェース情報の終了。

このタイプのステートメントは、マッピング表を作成する際に使用できます。

例 2: 表に行を挿入する

次の 制御ステートメントは、DB2 がサンプル 表 EMP からすべての行を表 MYEMP に挿入することを指定しています。

汎用プログラミングインターフェース情報の開始。
EXEC SQL
  INSERT INTO MYEMP SELECT * FROM DSN8C10.EMP
ENDEXEC
汎用プログラミングインターフェース情報の終了。

例 3: カーソルを宣言する

次の 制御ステートメントは、表 DSN8810.EMP からすべての行を戻す照会のカーソルとして C1 を宣言しています。

汎用プログラミングインターフェース情報の開始。
EXEC SQL
  DECLARE C1 CURSOR FOR SELECT * FROM DSN8C10.EMP
ENDEXEC
汎用プログラミングインターフェース情報の終了。

DB2 クロスローダー 機能で宣言されたカーソルを使用して、ローカル・サーバーから、 または、DB2 クロスローダー機能の一部として の DRDA 準拠の任意のリモート・サーバーから、データをロードすることができます。