WRITE ステートメントは、指定された数のデータを内部 LOB(LOB で始まる絶対オフセットから計算)に書き込むために使用されます。
データは buffer パラメータから書き込まれます。WRITE は、指定された長さで LOB オフセット内に既存するデータを置き換え(上書き)ます。
適用対象
この内容はOceanBaseデータベースEnterprise Editionにのみ適用されます。OceanBaseデータベースCommunity EditionはMySQLモードのみを提供します。
構文
DBMS_LOB.WRITE (
lob_loc IN OUT NOCOPY BLOB,
amount IN INTEGER,
offset IN INTEGER,
buffer IN RAW);
DBMS_LOB.WRITE (
lob_loc IN OUT NOCOPY CLOB CHARACTER SET ANY_CS,
amount IN INTEGER,
offset IN INTEGER,
buffer IN VARCHAR2 CHARACTER SET ANY_CS);
パラメータの説明
| パラメータ | 説明 |
|---|---|
| lob_loc | 書き込む内部 LOB のロケーターです。DBMS_LOB使用方法を参照してください。 |
| amount | 書き込むバイト数(BLOBの場合)または文字数(CLOBの場合)。 |
| offset | LOBの読み取り開始位置のバイト数(BLOBの場合)または文字数(CLOBの場合)のオフセット(原点は1)。 |
| buffer | 書き込み用の入力バッファ。 |
異常時の対処
| 例外 | 説明 |
|---|---|
| VALUE_ERROR | lob_loc、mount、または offset パラメータのいずれかが NULL、範囲外、または無効です。 |
| INVALID_ARGVAL | 次のような場合が考えられます:
|
| QUERY_WRITE | クエリまたはPDMLパラレル実行サーバー内で LOB 書き込みを実行できません。 |
| BUFFERING_ENABLED | LOB でバッファリングが有効になっている場合、LOB バッファリングが有効な状態で操作を実行することはできません。 |
| SECUREFILE_OUTOFBOUNDS | 書き込み操作を実行しようとした際に、FRAGMENT_ * とマークされた LOB の末尾をスキップしました。 |
使用方法
入力量がバッファ内のデータより大きい場合、エラーが発生します。入力量がバッファ内のデータより小さい場合、バッファ内のバイトまたは文字数のみが
LOBに書き込まれます。指定されたオフセットがLOB内の現在のデータの末尾を超えると、BLOBまたはCLOBにそれぞれゼロバイトフィラーまたはスペースが挿入されます。VARCHAR2バッファの形式は、CLOBパラメータの形式と一致していなければなりません。つまり、LOBパラメータの型がCLOBの場合、バッファにはCHARデータが含まれていなければなりません。クライアントから
DBMS_LOB_WRITEを呼び出す際、バッファにはクライアント文字セットのデータが含まれていなければなりません。バッファデータをLOBに書き込む前に、データベースはクライアントバッファをサーバーの文字セットに変換します。LOB操作をOpen/Closeインターフェースでラップすることは必須ではありません。操作実行前にLOBを開いていない場合、呼び出し中にLOB列上の機能インデックスとドメインインデックスが更新されます。操作実行前にLOBを開いている場合、トランザクションコミット前に閉じる必要があります。内部LOBを閉じると、LOB列上の機能インデックスとドメインインデックスが更新されます。LOB操作がOpen/Closeインターフェースでラップされていない場合、LOBへの書き込みごとに機能インデックスとドメインインデックスが更新されます。パフォーマンスへの悪影響を避けるため、LOBへの書き込み操作はOPENまたはCLOSEステートメント内に含めることを推奨します。必要に応じて、
WRITEはLOBを書き込む前にLOBを取得します。ただし、書き込み操作がLOB全体を上書きするように指定されている場合はこの限りではありません。