SET
SETコマンドは、2つの異なる操作に使用されます。DIRキーワードを使用して現在の作業ディレクトリを設定するか、READONLY、AUTOCOMMIT、ISOLATIONの各キーワードを使用して、現在のデータベース接続に許可されるアクセス・レベルを定義します。
条件付
SET ----------- DIR ------------ディレクトリ・パス---------------->
>-- READONLY ------- *NO --------------------------->
*YES
>-- AUTOCOMMIT ----- *YES -------------------------->
*NO
>-- ISOLATION ------ *NONE -------------------------|
*READCOMMITTED
*READUNCOMMITTED
*REPEATABLEREAD
*SERIALIZABLE
キーワード
DIR |
DIRキーワードを使用して、現在のディレクトリとして設定する相対ディレクトリ・パスまたは絶対ディレクトリ・パスを指定します。 DIRキーワードとSETの他のキーワードとの関連はありません。 |
READONLY |
現在のデータベース接続で読み込みアクセスや書き込みアクセスを許可するかどうかを指定します。データベース接続はCONNECTコマンドを使用して確立する必要があります。このキーワードは、現在のデータベース接続に適用されます。 省略値では、データベース接続が確立されると、読み込みアクセスと書き込みアクセスが許可されます(データベースで課せられる制限により異なります)。 値が*YESの場合、データベースの変更は各ステートメントの実行後に自動的にコミットされます。 値が*NOの場合、データベースの変更はプログラムによるトランザクションの境界で制御されます。 READONLYキーワードとDIRキーワードとの関連はありません。 |
AUTOCOMMIT |
情報がデータベースに自動的にコミットされるかどうかを指定します。データベース接続は、このキーワードを使用するCONNECTコマンドで確立する必要があります。このキーワードは、現在のデータベース接続に適用されます。 省略値では、接続が確立されると、自動コミット・モードになります。 値が*YESの場合、データベースの変更は各ステートメントの実行後に自動的にコミットされます。 値が*NOの場合、データベースの変更はプログラムによるトランザクションの境界で制御されます。 AUTOCOMMITキーワードとDIRキーワードとの関連はありません。 |
ISOLATION |
トランザクション・アイソレーションのレベルが現在のデータベースに適用されます。データベース接続は、このキーワードを使用するCONNECTコマンドで確立する必要があります。このキーワードは、現在のデータベース接続に適用されます。 ISOLATIONキーワードとDIRキーワードとの関連はありません。 省略値は*NONEです。それ以外の場合、 ANSI/ISOのSQL規格で定義されたトランザクションの以下の4つのレベルから選択できます。 *READUNCOMMITTED コミットされていないすべてのデータを接続から読み込むことができます。これは、アイソレーションがない場合(*NONE)と同じではありません。 *READCOMMITTED このレベルでは、ダーティー読み込みは防止されますが、ファントム読み込みやノンリピータブル読み込みは防止されません。このアイソレーション・レベルを使用する場合、現在のトランザクションの開始前にコミットされたデータのみを使用できます。ダーティー・データや、同時トランザクションで行われた変更は使用できません。 このレベルは*READUNCOMMITTEDよりも明らかに制限されます。 *REPEATABLEREAD このレベルでは、ダーティー読み込みやノンリピータブル読み込みは防止されますが、ファントム行は防止されません。つまり、*READUNCOMMITTEDや*READCOMMITTEDと比較した場合、この読み込みを待機しなければならない他のトランザクションが増える可能性があります。 これは*READCOMMITTEDよりも制限されます。 *SERIALIZABLE *SERIALIZABLEにより、最大のトランザクション・アイソレーションが提供されます。トランザクションが*SERIALIZABLEレベルで分離される場合、トランザクションの開始前にコミットされたデータのみを使用できます。ダーティー・データも、トランザクション実行時にコミットされた同時トランザクション変更も使用できません。このレベルでは、トランザクションは同時ではなく次々に効率的に実行されるため、シリアル・トランザクション実行をエミュレートします。 これは*REPEATABLEREADよりも制限されます。 これらのアイソレーション・レベルに関して、アプリケーションに適用する正しいアイソレーション・レベルを判断するには、以下の3つの現象を理解する必要があります。 · ダーティー読み込み - トランザクションは、コミットされていないトランザクションで書き込まれたデータを読み込みます。2番目のトランザクションがロールバックされると、ロールバックにより変更が取り消されるため、最初のトランザクションで読み込まれたデータは無効になります。最初のトランザクションは、読み込まれたデータが無効になったことに気付きません。 · ノンリピータブル読み込み - トランザクションは以前に読み込んだデータを再度読み込み、コミットされた別のトランザクションによってデータが修正されたことを認識します。 · ファントム読み込み - データベースに追加された新しいレコードを、挿入前に開始したトランザクションで検出できる場合、ファントム読み込みが行われます。トランザクションは再度クエリーを実行し、検索条件を満たす行セットを返しますが、コミットされた別のトランザクションによって、条件を満たす追加行が挿入されたことを認識します。 ANSI/ISOのSQL規格のアイソレーション・レベルと、対応する動作の概要を以下の表にまとめています。 |
アイソレーション・レベル |
ダーティー読み込み |
ノンリピータブル読み込み |
ファントム読み込み |
*READUNCOMMITTED |
可能 |
可能 |
可能 |
*READCOMMITTED |
不可能 |
可能 |
可能 |
*REPEATABLEREAD |
不可能 |
不可能 |
可能 |
*SERIALIZABLE |
不可能 |
不可能 |
不可能 |
例
RDML
USE BUILTIN(JSM_COMMAND) WITH_ARGS('SET READONLY(*NO) ISOLATION(*READCOMMITTED)') TO_GET(#JSMSTS #JSMMSG)
RDMLX
use builtin(jsmx_command) with_args(#jsmhdle 'set dir(/newfiles') to_get(#jsmsts #jsmmsg)
ILE RPG
c eval jsmcmd = 'set readonly(*yes)'
c + ' autocommit(*no)'
c + ' isolation(*serializable)'
c callp p_jsmcmd(jsmcmd:jsmsts:jsmmsg)