RUNSQL CL コマンドの使用
RUNSQL CL コマンドにより、ソース・ファイルなしで SQL ステートメントを制御言語プログラム内から実行できます。
以下のステートメントを RUNSQL で使用できます。
- ALTER FUNCTION
- ALTER MASK
- ALTER PERMISSION
- ALTER PROCEDURE
- ALTER SEQUENCE
- ALTER TABLE
- ALTER TRIGGER
- CALL
- COMMENT
- COMMIT
- 複合 (動的)
- CREATE ALIAS
- CREATE FUNCTION
- CREATE INDEX
- CREATE MASK
- CREATE PERMISSION
- CREATE PROCEDURE
- CREATE SCHEMA
- CREATE SEQUENCE
- CREATE TABLE
- CREATE TRIGGER
- CREATE TYPE
- CREATE VARIABLE
- CREATE VIEW
- DECLARE GLOBAL TEMPORARY TABLE
- DELETE
- DROP
- GRANT
- INSERT
- LABEL
- MERGE
- REFRESH TABLE
- RELEASE SAVEPOINT
- RENAME
- REVOKE
- ROLLBACK
- SAVEPOINT
- SET CURRENT DECFLOAT ROUNDING MODE
- SET CURRENT DEGREE
- SET CURRENT IMPLICIT XMLPARSE OPTION
- SET CURRENT TEMPORAL SYSTEM_TIME
- SET ENCRYPTION PASSWORD
- SET PATH
- SET SCHEMA
- SET TRANSACTION
- TRANSFER OWNERSHIP
- TRUNCATE
- UPDATE
ステートメント・ストリングの長さは、最大で 5000 文字にすることができます。セミコロンで終了してはなりません。
ステートメント・ストリングで注釈を使用できます。行の注釈は 2 重のハイフン (--) で開始し、その行の末尾 (復帰/改行) またはストリングの末尾で終了します。ブロックの注釈は /* で開始し、対応する */ に到達するまで続きます。 ブロックの注釈はネストすることができます。
RUNSQL でファイルを開いた場合、そのファイルは、制御が呼び出し元に返される前に閉じられます。コミットメント制御が活動状態の場合、ユーザーのアプリケーションでコミットまたはロールバックを実行する必要があります。
コマンドは、呼び出し元の活動化グループで実行されます。コンパイル済みの制御言語プログラムに RUNSQL が含まれている場合、プログラムの活動化グループが使用されます。
デフォルトでは出力リストは生成されません。障害が発生した場合、SQL メッセージがエスケープ・メッセージとして呼び出し元に送信されます。構文エラーを返す複雑な SQL ステートメントの場合、データベース・モニターを使用して、エラーの原因の検出に役立てることができます。データベース・モニターを開始し、RUNSQL コマンドを実行し、System i® ナビゲーター を使用してデータベース・モニターを分析します。コマンドで OPTION パラメーター、PRTFILE パラメーター、および SECLVLTXT パラメーターを使用して、リストを生成できます。
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