READLOB |
|
|
|
|
[IN] [FILE] view-name |
|
[PASSWORD=operand2]
|
||||||
[CIPHER=operand3]
|
||||||
[[WITH] ISN [=] operand4]
|
||||||
[[STARTING] [AT] OFFSET [=] operand5]
|
||||||
| statement |
||||||
END-READLOB |
(ストラクチャードモードのみ) | |||||
LOOP |
(レポーティングモードのみ) | |||||
このドキュメントでは、次のトピックについて説明します。
構文図で使用されている記号については、「構文記号」を参照してください。
関連ステートメント:READ | FIND | GET | UPDATELOB
関連機能グループ:データベースへのアクセスと更新
READLOB ステートメントは、単一レコードで使用します。そのレコードでは、定義された LOB フィールド(Large OBject フィールド)がループ処理中に固定長のセグメントで読み取られます。この LOB フィールドの読み取りにのみ適用されます。
ループ開始時に、LOB フィールド内のオフセットが最初のデータの取得元に設定されます。次のループの反復では、最後のセグメントに続くセグメントが返されます。LOB データエンドに到達すると、ループが終了します。
このステートメントでは、処理ループを開始します。『プログラミングガイド』の「ループ処理」も参照してください。
READLOB ステートメントは、Adabas データベースにアクセスするためにのみ使用できます。
オペランド定義テーブル:
| オペランド | 構文要素 | フォーマット | オペランド参照 | ダイナミック定義 | ||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
operand1 |
C | S | N | P | I | B * | ○ | × | ||||||||||||
operand2 |
C | S | A | ○ | × | |||||||||||||||
operand3 |
C | S | N | ○ | × | |||||||||||||||
operand4 |
C | S | N | P | I | B * | ○ | × | ||||||||||||
operand5 |
C | S | N | P | I | B * | ○ | × | ||||||||||||
* operand1 operand4 および operand5 のフォーマット B は、4 以下の長さでのみ使用できます。
構文要素の説明:
| 構文要素 | 説明 |
|---|---|
operand1 |
読み取る LOB セグメント数:
実行するループ実行の数は、数値定数( 例: READLOB (5) IN FILE VIEW01 ... #CNT := 10 READLOB (#CNT) IN FILE VIEW01 ... このステートメントでは、指定した制限が、 注意: |
ALL |
ALL オプション:
LOB データを末尾まで読み込むことを明示するため、オプションでキーワード
|
view-name |
ビュー名:
|
|
PASSWORD および CIPHER 節:
|
|
WITH
ISN=operand4 |
WITH ISN オプション:
このオプションは、
注意: このオプションを省略すると、最後にアクティブになったデータベースステートメントの |
STARTING AT
OFFSET=operand5 |
STARTING AT OFFSET 節:
最初のセグメント読み取りが開始される LOB フィールド内に開始オフセットを指定します。LOB フィールドの最初のバイトはオフセットゼロ(
この節を省略すると、開始オフセット( 後述する「READLOB で使用可能なシステム変数」で説明されている処理中の |
END-READLOB |
READLOB ステートメントの終了:
ストラクチャードモードの場合、Natural の予約キーワード レポーティングモードでは、Natural のステートメント |
LOOP |
Natural システム変数 *ISN、*COUNTER および *NUMBER が READLOB ステートメントで提供されます。
これらのシステム変数は、P10 のフォーマットと長さで定義されています。このフォーマット/長さは変更できません。
READLOB ステートメントとともに使用する場合の Natural システム変数の目的は、次のとおりです。
| システム変数 | 説明 | |
|---|---|---|
*ISN |
現在処理中のレコードの Adabas ISN が入ります。READLOB ステートメントは常に同じレコードにアクセスするため、返される *ISN 値はすべてのループの反復で同じです。
|
|
*COUNTER |
処理ループが通過した回数が含まれます。 | |
*NUMBER |
コールの前: | セグメントが読み取られる LOB フィールドにバイトオフセットを指定します。値ゼロ(0)は、LOB フィールドの左端のバイトを表します。
これは、最初のループ反復には適用されません。この場合、読み取りオフセットは |
| コールの後: | データが検出された場合(つまり、オフセットが LOB フィールド長未満であった場合)、オフセットにセグメント長を加えた値を受け取ります。これにより、*NUMBER の値が LOB フィールド全体の長さより大きくなる可能性があります。
データが見つからなかった場合(つまり、オフセットが LOB フィールド長以上であった場合)、 |
|
LOB フィールドで連続した読み取りが要求された場合、*NUMBER 値を READLOB 内で変更してはなりません。これは、後続のループ反復において次のセグメントで正確に継続するためのオフセットが含まれているためです。ただし、LOB フィールド内の別の場所で継続(再配置)する必要がある場合は、*NUMBER 値をこのオフセットに変更できます。*NUMBER がリセットされた場合、LOB の先頭から次のセグメントに移動します。*NUMBER が (n) 増えた場合、このバイト数が LOB フィールド処理でスキップされます。
|
||
READLOB ステートメントは常に、ホールド状態にないレコードを読み取ります。LOB データの安定性を保証するため(つまり、他のユーザーによる更新を防止するため)、READLOB がLOB フィールドを参照している間、データベースステートメントでレコードをホールド状態に設定し、ISN を以下のいずれかに設定できます
UPDATE または DELETE が外部 READ または FIND ステートメントを参照しているため、排他的ホールドに設定、または
READ または FIND ステートメントで適用される明示的な IN SHARED
HOLD オプションにより共有ホールドに設定。追加のサブパラメータ MODE=Q が使用されている場合、読み取りシーケンスで次のレコードがフェッチされると、レコードは自動的にホールドからリリースされます。
READLOB ステートメントは常に、ホールド状態にないレコードを読み取るため、UPDATE、DELETE または GET SAME ステートメントは READLOB ステートメントを参照してはいけません。
DEFINE DATA LOCAL
1 VIEW01 VIEW OF ..
2 NAME
2 L@LOBFIELD
1 VIEW02 VIEW OF ..
2 LOBFIELD_SEGMENT /* LOB field defined in DDM with (A1000).
END-DEFINE
*
READ VIEW01 BY NAME = 'SMITH' /* Outer statement reads all demanded record
/* fields, except the LOB field.
IN SHARED HOLD MODE=Q /* Set record into shared hold to enforce LOB
/* data stability during READLOB.
DISPLAY NAME 'Total-length LOB-field' L@LOBFIELD
READLOB VIEW02 /* Record number used from active record of
/* READ statement.
/* LOB is read in segments with length 1000.
STARTING AT OFFSET = 2000 /* Start to read the LOB field at byte 2000.
WRITE 'Loop counter:' *COUNTER 10X ' Next offset:' *NUMBER
PRINT VIEW02.LOBFIELD_SEGMENT
END-READLOB
END-READ
END
DEFINE DATA LOCAL
1 #ISN (I4)
1 #CNT (I4)
1 #OFF (I4)
1 VIEW02 VIEW OF ..
2 LOBFIELD_SEGMENT /* LOB field defined in DDM with (A1000).
END-DEFINE
*
INPUT (AD=T)
/ ' Read record (ISN):' #ISN
/ 'Number of segments:' #CNT
/ ' Start at offset:' #OFF
*
READLOB (#CNT) VIEW02 /* Read max. (#CNT) segments with length 1000.
WITH ISN = #ISN /* Record number provided by user.
/* Record is not in hold.
STARTING AT OFFSET = #OFF /* Start to read the LOB field at byte (#OFF).
WRITE 'Loop counter:' *COUNTER 10X ' Next offset:' *NUMBER
PRINT VIEW02.LOBFIELD_SEGMENT
END-READLOB
END
DEFINE DATA LOCAL
1 VIEW01 VIEW OF ..
2 NAME
1 VIEW02 VIEW OF ..
2 LOBFIELD_SEGMENT /* LOB field defined in DDM with (A1000).
END-DEFINE
*
R1. READ VIEW01 BY NAME = 'SMITH'/* Outer statement reads all demanded
/* record fields, except the LOB field.
DISPLAY NAME
READLOB VIEW02 /* Record number from active record of READ.
/* LOB is read in segments with length 1000.
STARTING AT OFFSET = 2000 /* Start to read LOB field at byte 2000.
WRITE 'Loop counter:' *COUNTER 10X ' Next offset:' *NUMBER
PRINT VIEW02.LOBFIELD_SEGMENT
END-READLOB
...
UPDATE (R1.) /* Set record into exclusive hold that
/* enforces LOB data stability during READLOB.
END OF TRANSACTION
END-READ
END