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

این مقاله نشان می‌دهد که چگونه جداول خارجی برای خواندن داده‌های CLOB و BLOB استفاده می‌شوند و عملیات بارگذاری PARALLEL مقادیر زیادی از داده را ممکن می‌سازند.مقالات بیشتر در آرتارادآماده کردن محیط بررسی:Multiple CLOB Files:برای این کار یک oracle Directory ایجاد می کنیمcreate or replace directory temp_dir aS '/tmp/';یکسری فایل از نوع های زیر ایجاد می کنیم و در مسیر فوق قرار می دیمclob_test1.txtclob_test2.txtblob_test1.docblob_test2.docفایل lob_test_data.txt را که شامل محتوی زیر می باشد را ایجاد می کنیم1,one,01-JAN-2006,clob_test1.txt,blob_test1.doc2,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_loaderdefault directory temp_diraccess parameters(records delimited by newlinebadfile 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 2reject limit unlimited;Translation is too long to be savedدر تعریف جدول خارجی باید به چند نکته توجه کرد:· نام فیلدهای داده های LOB(clob_filename,blob_filename) با نام ستون ها (clob_content، blob_content) مطابقت ندارد. این امر تأکید می کند که این فیلدها در فایل داده حاوی داده های واقعی نیستند، فقط نام فایل هایی که داده ها در آنها یافت می شود.· بند COLUMN TRANSFORMSتوضیح می دهد که چگونه داده های CLOB و BLOB باید بارگذاری شوند. در این مورد ما از یک فیلد از datafile برای شناسایی نام فایل و یک ثابت برای نام دایرکتوری استفاده می کنیم. برای بارگیری از چندین دایرکتوری از یک فیلد اضافی در فایل داده برای شناسایی شی دایرکتوری استفاده کنید.کوئری زیر خروجی جدول را به ما نشان می دهد.column varchar2_content format a16column date_content format a12column clob_content format a20select number_content,varchar2_content,to_char(date_content, 'DD-MON-YYYY') as date_content,clob_content,dbms_lob.getlength(blob_content) as blob_lengthfrom lob_tab;NUMBER_CONTENT VARCHAR2_CONTENT DATE_CONTENT CLOB_CONTENT BLOB_LENGTH-------------- ---------------- ------------ -------------------- -----------1 one 01-JAN-2006 This is a clob test1 240642 two 02-JAN-2006 This is a clob test2 240642 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_loaderdefault directory temp_diraccess parameters(records delimited by newlinebadfile 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 2reject limit unlimited;در ادامه بر روی جدول کوئری را اجرا می کنیمselect id, dbms_lob.getlength(clob_content) as clob_lengthfrom lob_taborder by id;ID CLOB_LENGTH---------- -----------1 90002 9000SQL>