Merhaba Değerli Blog Arkadaşlarım;
Bu yazımda PLSQL ile sunucu üzerinde bir directory içinde nasıl dosyalar oluşturacağımızı ve dosyalar içine nasıl veri yazacağımızı anlatacağım. Konunun sonunda ise bu prosedürlerin hangi amaçlarla kullanılabileceğinden bahsedeceğim.
Başlıyoruz...
Öncelikle PLSQL Developer ile veritabanımıza (Oracle Enterprise 10.2.0.3) bağlantımızı açıyoruz ve yeni bir prosedür oluşturuyoruz.
Prosedür adımız: OF_DOSYA_YAZ
Giriş Argümanlarımız:
XMETIN,Tipi: VARCHAR2
XDOSYA_ADI,Tipi: VARCHAR2
XMETIN: Oluşturacağımız text file içine giriş yapacağımız metni içerecek.
XDOSYA_ADI: Oluşturacağımız text file adını içerecek.
Prosedür oluşturma işleminden sonra, Oracle nimetlerinden olan Database Directory ile yeni bir directory yaratıyoruz. Aşağıda resmini göreceğiniz üzere,
Directory Name: OF_DOSYA_YOLU
Path: C:\ (Bu yol sizi yanıltmasın, server üzerindeki C sürücüsünü işaret etmektedir. Client ile alakası yoktur.)
Directory oluşturma işleminden sonra, prosedürümüzün kalan kodlarını yazıyoruz ve F8 Tuşuyla derliyoruz. (Compile Procedure)
Derleme işleminde sorun yaşarsanız ekranın alt kısmında uyarı metni göreceksiniz.

Dikkat edilecek konulardan birisi prosedür içindeki Exception (İstisna) yönetimidir. Exception tiplerini bu kadar artırmaya gerek duymadan, sadece exception when others then
bloğu ile kod hatalarını yine yakalayabilirdik ancak sorunun nereden kaynaklandığını tam olarak tespit etme şansımız kalmayacaktı.
Kodun Yazılmış Hali;
create or replace procedure OF_DOSYA_YAZ(XMETIN IN VARCHAR2,XDOSYA_ADI IN VARCHAR2) is
dosya utl_file.file_type;
begin
dosya := utl_file.fopen('OF_DOSYA_YOLU',XDOSYA_ADI,'W');
utl_file.put_line(dosya,XMETIN);
if utl_file.is_open(dosya) then
utl_file.fclose_all;
dbms_output.put_line('Closed All');
end if;
exception
when utl_file.invalid_mode then
RAISE_APPLICATION_ERROR (-20051, 'Geçersiz Dosya Modu');
when utl_file.invalid_path then
RAISE_APPLICATION_ERROR (-20052, 'Geçersiz Dosya Yolu');
when utl_file.invalid_filehandle then
RAISE_APPLICATION_ERROR (-20053, 'Geçersiz Filehandle');
when utl_file.invalid_operation then
RAISE_APPLICATION_ERROR (-20054, 'Geçersiz İşlem');
when utl_file.read_error then
RAISE_APPLICATION_ERROR (-20055, 'Okuma Hatası');
when utl_file.internal_error then
RAISE_APPLICATION_ERROR (-20057, 'İç Hata');
when utl_file.charsetmismatch then
RAISE_APPLICATION_ERROR (-20058, 'Veri Okunurken Tutarsızlık Ortaya Çıktı');
when utl_file.file_open then
RAISE_APPLICATION_ERROR (-20059, 'Dosya Zaten Açık');
when utl_file.invalid_maxlinesize then
RAISE_APPLICATION_ERROR(-20060,'Satır Boyutu Aşıldı 32K');
when utl_file.invalid_filename then
RAISE_APPLICATION_ERROR (-20061, 'Geçersiz Dosya Adı');
when utl_file.access_denied then
RAISE_APPLICATION_ERROR (-20062, 'Dosya Erişimi Engellendi');
when utl_file.invalid_offset then
RAISE_APPLICATION_ERROR (-20063,'FSEEK Parametresi Sıfırdan Küçük Olamaz');
when others then
RAISE_APPLICATION_ERROR (-20099, 'Tanımsız UTL_FILE Hatası');
end OF_DOSYA_YAZ;

