SETコ マンドを使って、データベースに対するアクティビティを実際に実行する前にデータベース接続プロパティを設定することができます。このコマンドのすべての機能を理解することが非常に重要です。
コマンド | キーワード | 値 | 開発者用メモ |
|---|---|---|---|
SET | ONERROR | *ROLLBACK | 任意。このキーワードは、SQLステートメントの実行時に例外が発生した場合に行うアクションを指定する場合に使用されます。 |
*CONTINUE | SQL ステートメント実行時に例外が発生した場合、処理は続行されます。 | ||
*DISCONNECT | SQL ステートメント実行時に例外が発生した場合、データベース接続が閉じられます。 | ||
ONWARNING | *STOP | 任意。このキーワードは、SQLステートメントの実行時に警告メッセージが発生した場合に行うアクションの指定に使用されます。 | |
*CONTINUE | SQL ステートメント実行時に警告が発生した場合、処理は続行されます。 | ||
READONLY | *YES | 任意。データベース接続の読み取り専用モードを有効にします。 | |
*NO | データベース接続の読み取り専用モードを無効にします。 | ||
AUTOCOMMIT | *YES | 任意。データベース接続の自動コミット・モードを有効にします。 | |
*NO | データベース接続の自動コミット・モードを無効にします。 | ||
ISOLATION | *NONE | 任意。接続のトランザクション分離レベルを NONE に設定します。 | |
*READCOMMITTED | 接続のトランザクション分離レベルを READ COMMITTED に設定します。 | ||
*READUNCOMMITTED | 接続のトランザクション分離レベルを READ UNCOMMITTED に設定します。 | ||
*REPEATABLEREAD | 接続のトランザクション分離レベルを 繰り返しEPEATABLE READ に設定します。 | ||
*SERIALIZABLE | 接続のトランザクション分離レベルを SERIALIZABLE に設定します。 | ||
SQLSTATE | *NONE | 任意。SQLException は ERROR のステータスを返します。 SQLWarning は WARNING のステータスを返します。 | |
*ALL | SQLException および SQLWarning は SQLxxxxx のステータスを返します。 | ||
*ERROR | SQLException はSQLxxxxx のステータスを返します。 | ||
*WARNING | SQLWarning は SQLxxxxx のステータスを返します。 | ||
MAXROWS | 整数 | 任意。クエリにより返される行の最大数を指定します。 | |
*NOMAX | デフォルト。 | ||
PARAMETER | *NONE | 任意。キーワード PARAMETER を使用すると、EXECUTE コマンドや READ コマンドの実行前に SQL ステートメントを準備できます。ここで指定した値は、データベースで実行するアクティビティのタイプに大きく依存します。 | |
*LIST | EXECUTE コマンドのキーワード UPDATE を使用する場合、この値を設定できます。 | ||
*SQL | この値を設定して、EXECUTE コマンドの前に SQL ステートメントを準備することができます。 | ||
*CALL | この値を設定して、IN、OUT、OUTIN のパラメータを含むプロシージャの呼び出しを利用できます。 | ||
*MAP | クエリから大きめの結果セットが返されることが予想される場合、READ コマンドを使って値リストを受け取ることを選択しなければいけません。 |
SET PARAMETER(*SQL) #WRKLST(TXT)
SET PARAMETER(*LIST) #WRKLST(COL1,COL2,COL3)
SET ISOLATION(*READCOMMITTED) AUTOCOMMIT(*NO) ONERROR(*ROLLBACK) ONWARNING(*CONTINUE)
JDBCドライバーには、コミット制御や例外処理用のベンダー定義のデフォルト設定があります。例えば、自動コミットは通常有効になっています。
コミットとロールバックのロジックを広範囲にテストすることを強くお勧めします。
PARAMETERキーワードでは、SQLステートメントを準備する際にかなり役立つ技術が提供されます。
キーワード PARAMETER で値 *LIST、*SQL、*MAP、または *CALL を使用する場合は、SET コマンドで作業リストを提供する必要があります。この作業リストに含まれる情報は、どの値を使用するかによって異なります。以下の例に示すように、これらのオプションを互いに組み合わせて使用する可能性も十分にある点に注意してください。
SQLServiceサービスのSET、EXECUTE、READの各コマンドは、それぞれ緊密に関連しています。
* JSM コマンド用のフィールドを定義DEFINE FIELD(#JSMCMD) TYPE(*CHAR) LENGTH(256) Define the field and list that will hold the SQL commandDEFINE FIELD(#COLCMD) TYPE(*CHAR) LENGTH(100)DEF_LIST NAME(#WRKCMD) FIELDS(#COLCMD) TYPE(*WORKING)
* コミット制御の設定CHANGE FIELD(#JSMCMD) TO('SET ISOLATION(*READCOMMITTED) AUTOCOMMIT(*NO) ONERROR(*ROLLBACK) ONWARNING(*CONTINUE)')USE BUILTIN(JSM_COMMAND) WITH_ARGS(#JSMCMD) TO_GET(#JSMSTS #JSMMSG)
* SQL ステートメントをリストに設定して、SET コマンドを実行CHANGE FIELD(#COLCMD) TO('SELECT ID,NAME,AGE,SALARY')ADD_ENTRY TO_LIST(#WRKCMD)CHANGE FIELD(#COLCMD) TO('FROM TBLNAME')ADD_ENTRY TO_LIST(#WRKCMD)CHANGE FIELD(#JSMCMD) TO('SET PARAMETER(*SQL) SERVICE_LIST(COLCMD)')USE BUILTIN(JSM_COMMAND) WITH_ARGS(#JSMCMD) TO_GET(#JSMSTS #JSMMSG #WRKCMD)
* JSM コマンド関連フィールドの定義Define Field(#JSMSTS) Type(*Char) Length(020)Define Field(#JSMMSG) Type(*Char) Length(256)Define Field(#JSMCMD) Type(*Char) Length(256)Define Field(#JSMHND) Type(*Char) Length(4)
* SQL ステートメント用のフォールドとリストを定義Define Field(#COLCMD) Type(*Char) Length(020)Def_List Name(#WRKCMD) Fields(#COLCMD) Type(*WORKING)
* コミット制御の設定#JSMCMD := 'Set Isolation(*READCOMMITTED) AutoCommit(*NO) OnError(*ROLLBACK) OnWarning(*CONTINUE)'Use Builtin(JSMX_COMMAND) With_Args(#JSMHND #JSMCMD) To_Get(#JSMSTS #JSMMSG)
* SQL ステートメントを構築し、SET コマンドを実行#COLCMD := 'Select ID,NAME,AGE,SALARY'Add_Entry To_List(#WRKCMD)#COLCMD := 'From TBLNAME'Add_Entry To_List(#WRKCMD)#JSMCMD := 'Set Parameter(*SQL) 'Use Builtin(JSMX_COMMAND) With_Args(#JSMHND #JSMCMD) To_Get(#JSMSTS #JSMMSG #MAPLST)