15 Ekim 2008 Çarşamba

*.csv Dosyalarının Oracle Veritabanına Yüklenmesi (SQLLDR)

Merhaba,

Takip etmek istediğim konu ile biraz alakasız olacak fakat önemli bir konu ve hiç bahsetmediğim için yazacağım.

Belirli durumlarda Oracle veritabanına external verileri yüklememiz gerekebilir. Yani, bu veriler çoğu zaman bir Java veya C# arayüzünden gelmeyebilir. Bu veriler herhangi bir programlama dilinin arayüzünden gelmediği gibi, uzantıları da farklı olabilir. Bu durumda kullanabileceğimiz Oracle aracına SQL-LOADER diyoruz (komut olarak kullanım şekli ise SQLLDR).

Bir excel dosyasındaki bütün verileri .csv (comma seperated value) olarak değiştirebiliriz. Bu değişikliği yaptıktan sonra kısa bir örnek ile devam edelim. Bu arada sqlldr'ın çalışabilmesi için öncelikle bir control dosyası (.ctl) yaratmamız gerekiyor.

CONTROL FILE:

Bir text dosyası ve c'nin altında trial isimli bir folder açalım ve içine;

load data
infile 'c:\trial\veri.csv'
into table deneme
fields terminated by ","
optionally enclosed by '"'
(deneme_sayi,deneme_karakter)

Kaydedelim ve kapatalım. Uzantısını da .ctl olarak değiştirelim ve adını kontrol koyalım. Ardından yüklenmesini dilediğiniz schema'ya bağlanıp yukarıdaki deneme tablosunu yaratalım;

ORACLE TABLE:

C:\> sqlplus deneme/password@oracle_sid
SQL> drop table deneme purge;
SQL> create table deneme
SQL> (
SQL> deneme_sayi number(10), deneme_karakter varchar2(45)
SQL> );
Table created.

Tablomuzu da yarattıktan sonra control dosyasında belirttiğimiz veri.csv'ye bakalım. Önce bir excel dosyası yaratalım ve adını veri.xls koyalım. Ardından örneğimiz için içine şu verileri dolduralım;

EXCEL FILE:

987 Bu bir denemedir
654 Bu da bir denemedir
321 Bu da bir baska denemedir

Kaydedelim ve uzantısını da .csv olarak değiştirelim.

Bir komut satırı açarak şu şekilde deneyebiliriz;

SQLLDR INVOKE:

C:\trial> sqlldr deneme/password@oracle_sid control=kontrol.ctl log=logfile.log

Bu komutun ardından trial folderının altında logfile oluşacak ve buradan durumu gözleyebilirsiniz. Eğer herhangi bir problemle karşılaşacak olursanız da, .bad uzantılı bir dosya göreceksiniz.

Şimdi tablomuzu kontrol edelim ve verilerin yüklenip yüklenmediğini görelim,

C:\> sqlplus deneme/password@oracle_sid
SQL> select * from deneme;

Eğer verileri görebildiyseniz bu aşamada şunu yapabilmiş oldunuz. SQLLDR tool'u ile .csv uzantılı bir dosyanın içindeki verileri sağlıklı bir biçimde Oracle'da daha önceden yarattığınız tabloya atabildiniz.

Unutmadan, unix tabanlı işletim sistemi kullanan arkadaşlarda sqlldr'ı şu şekilde çalıştırabilir;

SQLLDR INVOKE:

% sqlload userid=deneme/password control=kontrol.ctl log=logfile.log

Tekrar görüşmek dileğiyle,

Ogan

2 yorum:

baki dedi ki...

Ogan bey, dosyaların uzantısı .csv mi olmalı? Başka bir çözümü var mı? teşekkürler...

Ogan Özdoğan dedi ki...

Merhaba,

Aslında gösterdiğim örnekte "fields terminated by "," yani virgül ile sütunları ayırmasını göstermişim. Bu sebepten dolayı da .CSV uzantılı bir dosyadan örnek vermişirim.

Herhangi bir text dosyası da veritabanına sqlldr ile aynı şekilde yüklenebilir.

Ogan

Takip et: @oganozdogan