DATA_LENGTH は、列の行内で使用される最大バイト数を格納します。CLOB を行に格納できる場合、最大値は 4000 です。LOBS が 4000 バイトを超えることはありません。行内ストレージが無効になっている場合、LOB は LOB データを検索するために必要なポインタ情報のみを格納します。これは 4000 バイトよりはるかに小さくなります。
SQL> create table t (clob_in_table clob
2 , clob_out_of_table clob
3 ) lob (clob_out_of_table) store as (disable storage in row)
4 , lob (clob_in_table) store as (enable storage in row)
5 /
Table created.
SQL> select table_name, column_name, data_length
2 from user_tab_columns
3 where table_name = 'T'
4 /
TABLE_NAME COLUMN_NAME DATA_LENGTH
------------------------------ ------------------------------ -----------
T CLOB_IN_TABLE 4000
T CLOB_OUT_OF_TABLE 86
EDIT、*_LOBSビューに情報を追加
[DBA|ALL|USER]_LOBS ビューを使用して、定義された in row out of row ストレージ設定を確認します。
SQL> select table_name
2 , cast(substr(column_name, 1, 30) as varchar2(30))
3 , in_row
4 from user_lobs
5 where table_name = 'T'
6 /
TABLE_NAME CAST(SUBSTR(COLUMN_NAME,1,30)A IN_
------------------------------ ------------------------------ ---
T CLOB_IN_TABLE YES
T CLOB_OUT_OF_TABLE NO
EDIT 2、いくつかの参照
LOB記憶域の定義の詳細は、『Oracle Databaseアプリケーション開発者ガイド - ラージ・オブジェクト』のLOB記憶域に関する項を参照してください。特に、変更可能な内容について説明している3番目の注意事項を参照してください:
ノート:
一部のストレージ パラメータのみを変更できます。たとえば、ALTER TABLE ... MODIFY LOB
ステートメントを使用して、、、またはまたはRETENTION
、
および
句を変更できます。PCTVERSION
CACHE
NO CACHE LOGGING
NO LOGGING
STORAGE
ALTER TABLE ... MOVE ステートメントを使用して TABLESPACE を変更することもできます。
ただし、テーブルが作成されると、CHUNK サイズ、または ENABLE または DISABLE STORAGE IN ROW 設定を変更することはできません。
また、インデックス構成テーブルの LOB は次のように述べています。
デフォルトでは、オーバーフロー セグメントなしで作成された索引構成表のすべての LOB は、表外に格納されます。つまり、索引構成表がオーバーフロー・セグメントなしで作成された場合、この表のLOBのデフォルト記憶域属性はDISABLE STORAGE IN ROWになります。このような LOB に対して ENABLE STORAGE IN ROW 句を強制的に指定しようとすると、SQL でエラーが発生します。
これは、jonearles が索引構成表で LOB を作成したときに、data_length 列に 4,000 が表示されなかった理由を説明しています。