5.31.3 SET
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 のステータスを返します。 SQLWarning は WARNING のステータスを返します。 |
|
|
*WARNING |
SQLWarning は SQLxxxxx のステータスを返します。 SQLException は ERROR のステータスを返します。 |
|
MAXROWS |
整数 |
任意。クエリにより返される行の最大数を指定します。 |
|
|
*NOMAX |
デフォルト。 |
|
PARAMETER |
*NONE |
任意。キーワード PARAMETER を使用すると、EXECUTE コマンドや READ コマンドの実行前に SQL ステートメントを準備できます。ここで指定した値は、データベースで実行するアクティビティのタイプに大きく依存します。 |
|
|
*LIST |
EXECUTE コマンドのキーワード UPDATE を使用する場合、この値を設定できます。この方法を利用する場合、データベースに対して追加、更新、削除する値は、このコマンドの SERVICE_LIST に含まれるリストで指定します。複数のレコードを更新 (挿入または削除) する場合、このオプションを使用することが推奨されています。複数のレコードがあっても、この値を使用しない場合は、レコードと同じ回数だけ EXECUTE を実行する必要があり、システムやネットワークに余分な負荷がかかります。このコマンドの詳細については、下記「リストと変数」および「例」を参照してください。 |
|
|
*SQL |
この値を設定して、EXECUTE コマンドの前に SQL ステートメントを準備することができます。これを行うことで、このコマンドの SERVICE_LIST 内で引き渡される作業リストに SQL ステートメントが配置されます。 この機能は、長いSQLステートメントを使用する場合に特に役立ちます。特に、最大フィールド長がわずか 256 文字の RDML アプリケーションの場合に便利です。詳細については、この表の下の「リストと変数」および「例」を参照してください。 |
|
|
*CALL |
この値を設定して、IN、OUT、OUTIN のパラメータを含むプロシージャの呼び出しを利用できます。 |
|
|
*MAP |
クエリから大きめの結果セットが返されることが予想される場合、READ コマンドを使って値リストを受け取ることを選択しなければいけません。この READ コマンドを使用するには、このキーワードを *MAP に設定する必要があります。*MAP では、このコマンドの SERVICE_LIST に列とフィールドのマッピング情報が含まれます。このコマンドの詳細については、下記「リストと変数」および「例」を参照してください。 |
例
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の各コマンドは、それぞれ緊密に関連しています。
RDML
- JSM コマンド用のフィールドを定義
DEFINE FIELD(#JSMCMD) TYPE(*CHAR) LENGTH(256)
Define the field and list that will hold the SQL command
DEFINE 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)
RDMLX - 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)