مقدمه

این مقاله نشان می‌دهد که چگونه جداول خارجی برای خواندن داده‌های CLOB و BLOB استفاده می‌شوند و عملیات بارگذاری PARALLEL مقادیر زیادی از داده را ممکن می‌سازند.


جداول خارجی شامل LOB ها در اوراکل

آماده کردن محیط بررسی:

Multiple CLOB Files:

برای این کار یک oracle Directory ایجاد می کنیم

create or replace directory temp_dir aS ‘/tmp/’;

یکسری فایل از نوع های زیر ایجاد می کنیم و در مسیر فوق قرار می دیم

فایل  lob_test_data.txt را که شامل محتوی زیر می باشد را ایجاد می کنیم

1,one,01-JAN-2006,clob_test1.txt,blob_test1.doc

2,two,02-JAN-2006,clob_test2.txt,blob_test2.doc

اکنون همه داده ها را داریم، به یک جدول خارجی نیاز داریم تا همه آنها را جمع آوری کنیم.

drop table lob_tab;

create table lob_tab (

  number_content    number(10),

  varchar2_content  varchar2(100),

  date_content      date,

  clob_content      clob,

  blob_content      blob

)

organization external

(

  type oracle_loader

  default directory temp_dir

  access parameters

  (

    records delimited by newline

    badfile temp_dir:’lob_tab_%a_%p.bad’

    logfile temp_dir:’lob_tab_%a_%p.log’

    fields terminated by ‘,’

    missing field values are null

    (

      number_content    char(10),

      varchar2_content  char(100),

      date_content      char(11) date_format date mask “DD-MON-YYYY”,

      clob_filename     char(100),

      blob_filename     char(100)

    )

    column transforms (clob_content from lobfile (clob_filename) from (temp_dir) clob,

                       blob_content from lobfile (blob_filename) from (temp_dir) blob)

  )

  location (‘lob_test_data.txt’)

)

parallel 2

reject limit unlimited;

Translation is too long to be saved

در تعریف جدول خارجی باید به چند نکته توجه کرد:

کوئری زیر خروجی جدول را به ما نشان می دهد.

column varchar2_content format a16

column date_content format a12

column clob_content format a20

select number_content,

       varchar2_content,

       to_char(date_content, ‘DD-MON-YYYY’) as date_content,

       clob_content,

       dbms_lob.getlength(blob_content) as blob_length

from   lob_tab;

NUMBER_CONTENT VARCHAR2_CONTENT DATE_CONTENT CLOB_CONTENT         BLOB_LENGTH

————– —————- ———— ——————– ———–

             1 one              01-JAN-2006  This is a clob test1       24064

             2 two              02-JAN-2006  This is a clob test2       24064

2 rows selected.

SQL>

Inline CLOB Files:

برای این کار یک oracle Directory ایجاد می کنیم

create or replace directory temp_dir as ‘/tmp/’;

یک فایل بسازید که برای نمونه در آن رکوردهایی با دو ستون قرار گرفته باشد. ستون اول ID و ستون دوم رشته ای بیش از 4000 کاراکتر باشه. ما نام این فایل را  inline_clob_test1.txt قرار می دهیم.

drop table lob_tab;

create table lob_tab (

  id            number,

  clob_content  clob

)

organization external

(

  type oracle_loader

  default directory temp_dir

  access parameters

  (

    records delimited by newline

    badfile temp_dir:’lob_tab_%a_%p.bad’

    logfile temp_dir:’lob_tab_%a_%p.log’

    fields terminated by ‘,’ optionally enclosed by ‘”‘

    missing field values are null

    (

      id,

      clob_content  char(1000000)

    )

  )

  location (‘inline_clob_test1.txt’)

)

parallel 2

reject limit unlimited;

در ادامه بر روی جدول کوئری را اجرا می کنیم

select id, dbms_lob.getlength(clob_content) as clob_length

from   lob_tab

order by id;

        ID CLOB_LENGTH

———- ———–

         1        9000

         2        9000

SQL>