RUNSQL CL コマンドの使用

RUNSQL CL コマンドにより、ソース・ファイルなしで SQL ステートメントを制御言語プログラム内から実行できます。

以下のステートメントを RUNSQL で使用できます。

ステートメント・ストリングの長さは、最大で 5000 文字にすることができます。セミコロンで終了してはなりません。

ステートメント・ストリングで注釈を使用できます。行の注釈は 2 重のハイフン (--) で開始し、その行の末尾 (復帰/改行) またはストリングの末尾で終了します。ブロックの注釈は /* で開始し、対応する */ に到達するまで続きます。 ブロックの注釈はネストすることができます。

RUNSQL でファイルを開いた場合、そのファイルは、制御が呼び出し元に返される前に閉じられます。コミットメント制御が活動状態の場合、ユーザーのアプリケーションでコミットまたはロールバックを実行する必要があります。

コマンドは、呼び出し元の活動化グループで実行されます。コンパイル済みの制御言語プログラムに RUNSQL が含まれている場合、プログラムの活動化グループが使用されます。

デフォルトでは出力リストは生成されません。障害が発生した場合、SQL メッセージがエスケープ・メッセージとして呼び出し元に送信されます。構文エラーを返す複雑な SQL ステートメントの場合、データベース・モニターを使用して、エラーの原因の検出に役立てることができます。データベース・モニターを開始し、RUNSQL コマンドを実行し、System i® ナビゲーター を使用してデータベース・モニターを分析します。コマンドで OPTION パラメーター、PRTFILE パラメーター、および SECLVLTXT パラメーターを使用して、リストを生成できます。

以下のように、CL から INSERT ステートメントを実行します。
RUNSQL SQL('INSERT INTO prodLib/work_table VALUES(1, CURRENT TIMESTAMP)')
制御言語プログラムでは、ファイル受信 (RCVF) コマンドを使用して、以下の照会用に生成された表の結果を読み取ることができます。
RUNSQL SQL('CREATE TABLE qtemp.worktable AS
  (SELECT * FROM qsys2.systables WHERE table_schema = ''MYSCHEMA'') WITH DATA')
       COMMIT(*NONE) NAMING(*SQL)
以下のように、ステートメントの一部として入力パラメーターを使用して、SQL ステートメントを構成して実行する制御言語プログラムを作成します。
RUNSQL1: PGM PARM(&LIB)
    DCL &LIB TYPE(*CHAR) LEN(10)
    DCL &SQLSTMT TYPE(*CHAR) LEN(1000)
    CHGVAR VAR(&SQLSTMT) +
           VALUE('DELETE FROM qtemp.worktable1 +
                  WHERE table_schema = ''' || &LIB || ''')
    RUNSQL SQL(&SQLSTMT) COMMIT(*NONE) NAMING(*SQL)
RUNSQL1: ENDPGM