در دیتابیس اوراکل LOBها همیشه در LOB segment ذخیره نمی شوند! زمانی که حجم یک LOB از مقدار مشخصی کمتر باشد، این LOB در segment متعلق به خود جدول و در کنار فیلدهای non-LOB ذخیره خواهد شد:
SQL> create table tbl_asnad( id number, doc clob); Table created SQL> alter table tbl_asnad rename lob(doc) "SYS_LOB0000136146C00002$$" to lob_asnad_doc; Table altered
SQL> insert into TBL_ASNAD values(1,'usefzadeh.com'); 1 row inserted SQL> select segment_name,bytes from user_segments where segment_name in ('LOB_ASNAD_DOC','TBL_ASNAD'); SEGMENT_NAME BYTES ---------------------- ---------- TBL_ASNAD 65536 LOB_ASNAD_DOC 65536
SQL> begin 2 for i in 1.. 100000 loop 3 insert into TBL_ASNAD values(1,'usefzadeh.com'); 4 end loop; 5 end; 6 / PL/SQL procedure successfully completed
SQL> select segment_name,bytes from user_segments where segment_name in ('LOB_ASNAD_DOC','TBL_ASNAD'); SEGMENT_NAME BYTES -------------------- ---------- TBL_ASNAD 8388608 LOB_ASNAD_DOC 65536
این محدودیت در نسخه 21c برابر 4000 بود و در نسخه 23c به 8000 افزایش یافته است. به ادعای اوراکل، با این قابلیت می توان در زمان عملیاتهایی نظیر Full table scan، Index range scan و DML کارایی بهتری داشت.