1.5 LOBの制限事項

LOBデータを操作する際には、いくつかの制限を考慮する必要があります。

LOB列には次のルールと制限があります。

  • LOBは主キー列として指定できません。
  • 問合せのORDER BY句やGROUP BY句または集計ファンクションには、LOB列を指定できません。
  • SELECT... DISTINCT文やSELECT... UNIQUE文、または結合文には、LOB列を指定できません。ただし、列のオブジェクト型にその型で定義されたMAPファンクションまたはORDERファンクションが含まれている場合、SELECT...DISTINCT文、UNIONMINUS集合演算子を使用する問合せには、オブジェクト型列のLOB属性を指定できます。
  • クラスタには、キー列としてもキー列以外の列としても、LOBを含めることはできません。
  • 圧縮されたVARRAYデータ型はサポートされていますが、パフォーマンスは低下します。
  • 次のデータ構造は、一時インスタンスとしてのみサポートされます。この種のインスタンスはデータベース表に格納できません。
    • 任意のLOB型のVARRAY
    • LOB属性を持つオブジェクト型など、LOB型を含む任意の型のVARRAY
    • 任意のLOB型のANYDATA
    • LOB型を含む任意の型のANYDATA
  • LOBセグメントの最初の(INITIAL)エクステントには、3つ以上のデータベース・ブロックを含める必要があります。
  • 最小エクステント・サイズは14ブロックです。8Kブロック・サイズ(デフォルト)の場合は、112Kと同等になります。
  • AFTER UPDATE DMLトリガーの作成時には、UPDATE OF句にLOB列を指定できません。OCI関数またはDBMS_LOBパッケージを使用して、LOB列の値またはオブジェクト型列のLOB属性を変更した場合、AFTER UPDATE DMLトリガーを定義した表では、DMLトリガーが起動されません。
  • LOB列は索引キーの一部として指定できません。ただし、ファンクション索引またはドメイン索引の索引タイプ指定でLOB列を指定できます。また、Oracle Textを使用すると、CLOB列に索引を定義できます。
  • SQL*Loaderでは、LOBから読み取られたフィールドは句の引数として使用できません。
  • CLOB列に対する大/小文字を区別しない検索は、多くの場合成功しません。CLOB列に対して次の大と小文字を区別しない検索を実行するとします。
    ALTER SESSION SET NLS_COMP=LINGUISTIC;
    ALTER SESSION SET NLS_SORT=BINARY_CI;
    SELECT * FROM ci_test WHERE LOWER(clob_col) LIKE 'aa%';
    

    LOWER関数がないとSELECTは失敗します。Oracle TextまたはDBMS_LOB.INSTR()関数を使用して、大/小文字を区別しない検索を実行できます。