Home / MAKALELER / Veri Tabanı / External Table

External Table

External Table ve Kullanımları

Merhabalar,
External table ile ilgili bir örnek yapalım ve devamında bunu otomatize etmenin yollarını
araştıralım. Öncelikle; Oracle dan erişim için, bizim DB mizde bir directory oluşturmamız
ve file ları oraya atmamız gerekiyor.
CREATE OR REPLACE DIRECTORY DIR_AG AS ‘d:\temp’;                –directory oluşturuldu.
Bir csv file oluşturalım. “kisi_trial.csv” isim ve uzantılı dosyayı belirtmiş olduğum uzantıya atıyorum.
GRANT READ,WRITE ON DIRECTORY DIR_AG TO HR;        –yetkiler verildi.
Aşağıdaki kodlar yardımıyla, External table’ımızı oluşturalım;
CREATE TABLE tmp_tbl_deneme(
                           KONTROL_NO NUMBER(22),
                           KISI_NO NUMBER(22),
                           KONTROL_YER NVARCHAR2(100),
                           KONTROL_MESAJ NVARCHAR2(100),
                           KONTROL_UYGULAMA_NO NUMBER(22),
                           KONTROL_DATE DATE,
                           INSERT_DATE DATE,
                           LAST_UPDATE DATE
) ORGANIZATION EXTERNAL
          ( TYPE ORACLE_LOADER
             DEFAULT DIRECTORY DIR_AG
             ACCESS PARAMETERS
               (RECORDS DELIMITED BY NEWLINE CHARACTER SET AL32UTF8
                SKIP 1
                BADFILE ‘bad_%a_%p.bad’
                LOGFILE ‘log_%a_%p.log’
                FIELDSTERMINATED BY ‘,’
                OPTIONALLY ENCLOSED BY ‘”‘
                MISSING FIELD VALUES ARE NULL
                REJECT ROWS WITH ALL NULL FIELDS
                (“KONTROL_NO”,
“KISI_NO”,
“KONTROL_YER”,
“KONTROL_MESAJ”,
“KONTROL_UYGULAMA_NO”,
“KONTROL_DATE”      date’MM/DD/YYYY hh24:mi:ss’,
“INSERT_DATE”       date’MM/DD/YYYY hh24:mi:ss’,
“LAST_UPDATE”          date’MM/DD/YYYY hh24:mi:ss’
)
                  )
             LOCATION(DIR_AG:  ‘kisi_deneme.csv’)
          )
        REJECT  LIMIT  UNLIMITED
        PARALLEL(DEGREE 8 INSTANCES 1)
        NOMONITORING;
Burda oluşturduğumuz  tmp_tbl_deneme tablosuna sadece select yetkimiz var.
o yüzden bu tablomuzu başka bir tabloya insert etmemiz gerekmektedir.
CREATE TABLE tbl_deneme
AS
   SELECT * FROM tmp_tbl_deneme;
TRUNCATE TABLE tbl_deneme;  –belli koşullarla insert edeceksek bu şekilde içerisini boşaltabiliriz. 
Eğer bir primary key de tanımlanmışsa ve bu işlem otomatize yapılacaksa yani sürekli
yeni veriler geliyorsa; ilk load işlemini insert ile sonrasını merge ile yapabiliriz. Bunlar
tamamen bize lazım olan gerekliliklere gore şekillenebilir.
INSERT INTO tbl_deneme(KONTROL_NO,
                      KISI_NO,
                      KONTROL_YER,
                      KONTROL_MESAJ,
                      KONTROL_UYGULAMA_NO,
                      KONTROL_DATE,
                      INSERT_DATE,
                      LAST_UPDATE)
   SELECT KONTROL_NO,
          KISI_NO,
          KONTROL_YER,
          KONTROL_MESAJ,
          KONTROL_UYGULAMA_NO,
          KONTROL_DATE,
          INSERT_DATE,
          LAST_UPDATE
     FROM tmp_tbl_deneme;
Artık tbl_deneme tablomuzda istediğimiz değişiklikleri yapabiliriz.Merge işlemimizi
de şu şekilde yaparız; Primary_key olarak belirlediğimiz kolon üzerinden burdaki gibi ilerleyebiliriz:
MERGE                                        /*+parallel(tbl_deneme,6)*/
     INTO                                 tbl_deneme A
                                    USING tmp_tbl_deneme B
                                       ON (A.KISI_NO = B.KISI_NO)
WHEN NOT MATCHED
THEN
   INSERT                                    ( A .KONTROL_NO,
                                              A .KISI_NO,
                                               A .KONTROL_YER,
                                               A .KONTROL_MESAJ,
                                               A .KONTROL_UYGULAMA_NO,
                                               A .KONTROL_DATE,
                                               A .INSERT_DATE,
                                               A .LAST_UPDATE)
                                       VALUES ( B.KONTROL_NO,
                                               B .KISI_NO,
                                               B .KONTROL_YER,
                                               B .KONTROL_MESAJ,
                                               B .KONTROL_UYGULAMA_NO,
                                               B .KONTROL_DATE,
                                               B .INSERT_DATE,
                                               B.LAST_UPDATE);
Devamında Görüşmek üzere, Teşekkürler.

About Yunus Emre Kilinc

Mersin Üniversitesi Bilgisayar Mühendisliği bölümünü bitirdikten sonra Ankara'da yaşamaya başladım. Şu anda Fatih Üniversitesinde İşletme yüksek Lisansı(MBA) na devam etmekteyim. 2010 yılında Oracle DBA eğitimi aldım. OCA 11gR2 sertifikasına sahibim. 2009 yılından beri Türk Telekom A.Ş de xDSL teknolojileri alanında çalışmaktayım. Oracle veritabanı yönetimi konularında kendimi geliştirmeye çalışmaktayım. İlgilendiğim ve kullandığım teknolojiler : Oracle SQL , PL/SQL Oracle 11g , Oracle 10g , UNIX (Sun Solaris), UNIX (HP-UX) ,OSI Model , IP ,DSL ,Unix Shell Scripting

İlginizi Çekebilir

SQL Server ile Veri Şifreleme

Bilgi teknolojilerinde verinin güvenliği çok kritik bir öneme sahiptir. Önemli verileri korumak için ekstra bir …

Bir Cevap Yazın