دستور sqlldr برای Load یا بارگذاری داده ها در پایگاه داده

در استفاده از اوراکل گاهی اوقات مجبور هستید که داده ها را از درون فایلی به جداول آپلود (بارگذاری) کنید. به طور مثال می خواهید فایل هایی را در ستون های داده ای BLOB یا CLOB درون جدول آپلود (Load) کنید. برای این منظور می توانید از SQL*Loader (دستور sqlldr) استفاده کنید. sqlldr از محتویات فایلی برای آپلود داده ها به درون ستون های جدول استفاده می کند. داده ها خط به خط و زیر هم در فایل قرار گرفته اند و داده های هر سطر در ستون هایی که با یک نماد جدا ساز (مانند کاما ,) از هم جدا و مجزا شده اند. به طور محتویات فایلی به نام employee.txt که هر سط آن سه ستون که با کاما از هم جدا شده اند.

مورد دیگری که برای SQL*Loader یک SQL*Loader Control File لازم است، فایل SQL*Loader Control File که شامل تنظیمات لازم برای بارگذاری داده های درون فایل به جدول است. این فایل برای SQL*Loader مسیر فایل ورودی، فرمت فایل ورودی و دیگر اطلاعات لازم برای sqlldr را مشخص می کند. شکل زیر نمونه ای از این فایل که employee.ctl را نشان می دهد.

در شکل بالا

  • infile مسیر فایل ورودی (input file) را مشخص می کند.
  • into table : نام جدول را که باید داده های فایل به آن load شوند را مشخص می کنند.
  • fields terminated by : نماد جدا ساز ستون های فایل را مشخص می کند.
  • ( id, name, dept, salary ) : ستون های جدول که داده ها باید در آن لود شوند را مشخص می کند. تعداد ستون ها و نوع آنها ارتباط نظیر به نظیر با تعداد ستون ها و نوع آنها (که با کاما جدا شده اند) در فایل وجود دارد.

جدول باید از قبل در پایگاه داده وجود داشته باشد. پس لازم است که نخست جدولی را (در اینجا employee) ایجاد کنیم

) create table employee

,id integer

,(name varchar2(10

,(dept varchar2(15

,salary integer

;(hiredon date

سپس لازم است که فایل کنترلی را مطابق با انچه که در بالا گفته شد ایجاد کنید.

اگر داده های فایل شما میان ” ” قرار داشته باشند باید از ‘”‘fields terminated by “,” optionally enclosed by استفاده کنید تا مشخص شود ممکن است برخی از داده های فیلد های جدول مثلا به خاطر داشتن فضای خالی میان دو ” ” قرار گرفته اند. توجه کنید که نماد جدا کننده فیلد ها با زهم کاما (,) است.

در صورتی که جدول از پیش وجود نداشته باشد، خطای زیر پس از اجرای sqlldr نشان داده خواهد شد.

SQL*Loader-941: Error during describe of table EMPLOYEE

ORA-04043: object EMPLOYEE does not exist

برای لود کردن داده های فایل به درون جدول، از فرمت کلی زیر استفاده کنید

sqlldr userid=USERNAME/PASSWORD control=/path/to/control/file.ctl

OR

sqlldr userid=USERNAME@SERVER/PASSWORD control=/path/to/control/file.ctl

OR

sqlldr username@server/password control=loader.ctl

OR

sqlldr username/password@server control=loader.ctl

به طور مثال برای لود کردن داده های فایل employee.txt در جدول employee از کنترل فایل به نام employee.ctl توسط حساب کاربری tiger از دستور زیر استفاده کنید.

sqlldr scott/tiger control=/home/ramesh/sqlldr-add-new.ctl

OUTPUT : Commit point reached – logical record count 5

اگر دستور SELECT را بر روی جدول employee اجرا کنید خواهید دید که داده ها در آن لود شده اند

;select * from employee

در رکورد های (داده های) جدید

اگر دستور زیر را برای درج کردن داده های جدیدی به جدول استفاده کنید

sqlldr scott/tiger control=/home/ramesh/sqlldr-add-new.ctl

خطای زیر نشان داده می شود :

SQL*Loader-601: For INSERT option, table must be empty.  Error on table EMPLOYEE

و این بدین معنی است که برای درج، جدول می بایست خالی باشد. برای رفع این مشکل باید فایل Control File را تغییر دهیم و به آن عبارت append را اضافه کنیم.

و اگر دوباره دستور را اجرا کنیم

sqlldr scott/tiger control=/home/ramesh/sqlldr-append-more.ctl

خروجی زیر که دو رکورد جدید درج شده است، نشان داده می شود

Commit point reached – logical record count 2

همچنین می توانید داده را به طور مستقیم در خود Control File ذخیره و مستقیم از آن در جدول لود کنید. برای این منظور داده ها را پس از عبارت begindata وارد کنید.

فرض کنید که از نماد های مجزا سازی مختفی برای جدا سازی ستون های یک فایل استفاده شده باشد. پس لازم است در کنترل فایل و در خطی که نام ستون جداول را مشخص می کنیم، به کنترل فایل اعلام کنیم که ستون ها با چه نمادی ختم می شوند.

همچنین برای ادامه مثال ها می توانید لینک منبع آن از سایت thegeekstuf.com را بخوانید و برای اطلاع بیشتر اینجا را بخوانید.