Friday, April 25, 2008

read/write file - PL/SQL version

Buat yang hobi bermain ORACLE atawa PL/SQL barangkali tips ini bisa membantu.
Di dalam script PL/SQL yang kita buat, bisa jadi tidak hanya tabel yang ada di dalam database saja yang kita akses untuk mendapatkan atau menyimpan data. Seperti halnya bahasa pemrograman yang lain, adakalanya kita membutuhkan akses file yang ada di luar untuk mendapatkan data atau menyimpan suatu data.Secara default PL/SQL memang tidak menyediakan suatu prosedur khusus untuk menangani operasi file ini. Akan tetapi terdapat suatu package bawaan yang dinamakan UTL_FILE.
Di dalam package UTL_FILE ini disediakan sejumlah prosedur untuk menangani operasi file di dalam PL/SQL (kalau ndak salah sih mulai Oracle 7.3 sudah terdapat paket yang menangani file I/O). UTL_FILE ini akan mengakses suatu file melalui directory dan filename, yang terlebih dahulu harus kita definisikan. Berikut ini adalah langkah-langkah mendefinisikan directory dan filename tersebut:
  1. Buatlah suatu direktori dan sebuah file di delam direktori tersebut. Misal nama direktori di windows adalah D:\initial_ dan nama file-nya adalah orange.txt.
  2. Setelah itu lakukan inisialisasi parameter UTL_FILE_DIR di file init.ora. Pada file tersebut tambahkan script utl_file_dir=D:\initial_ Parameter inilah yang nantinya akan dibaca oleh prosedur FOPEN yang ada di dalam package UTL_FILE.
  3. Pastikan folder tersebut bisa diakses oleh user, baik itu akses read atau write.
  4. Untuk Oracle 9.2 ke atas, sebenarnya kita sudah tidak perlu repot menambahkan script di atas, karena sudah disediakan script khusus untuk membuat object directory. Object directory inilah yang nantinya akan diakses oleh prosedur yang ada di dalam UTL_FILE sebagai pengganti nama direktori sebenarnya. Berikut langkah-langkahnya :
    • Login pada Oracle dengan user system dan privilage sysdba.
    • Setelah itu jalankan script untuk membuat objek directory tertentu. Misal :
CREATE OR REPLACE DIRECTORY OUT_DIR AS 'D:\initial_'
Dimana OUT_DIR adalah nama dari objek directory sedangkan 'D:\initial_' adalah alamat dari direktori tersebut
    • Kemudian jalankan script untuk memberi akses tertentu pada object directory tersebut kepada suatu user.
GRANT WRITE ON DIRECTORY OUT_DIR TO SCOTT
Dimana OUT_DIR adalah nama object directory dan SCOTT adalah nama user schema
Setelah kita berhasil menciptakan object directory maka selanjutnya adalah membuat script sederhana untuk mengkases file-file yang ada di dalam direktori yang sudah kita definisikan. Pada contoh kali ini saya membuat suatu procedure dengan nama FILE_PROC. Procedure tersebut berisi sejumlah operasi file, yaitu FOPEN, PUTLINE, PUTF, dan FCLOSE

CREATE OR REPLACE PROCEDURE FILE_PROC AS
-- deklarasi variabel untuk menangkap file
v_FileHandle UTL_FILE.FILE_TYPE;
BEGIN
-- membuka file, dimana 'orange.txt' adalah nama sebuah file yang berada di
-- dalam direktori yang sudah kita definisikan di dalam object 'OUTDIR'
-- 'w' adalah open mode
-- 32767 adalah max line size
v_FileHandle := TL_FILE.FOPEN('OUT_DIR','orange.txt','w',32767);
UTL_FILE.PUT_LINE(v_FileHandle, 'This is line 1');
for v_count in 2..10 loop
UTL_FILE.PUTF(v_FileHandle,'This is line %s|\n',v_count);
end loop;
-- menutup file
UTL_FILE.FCLOSE(v_FileHandle);
END;
/

Referensi :
  • Urman, Scott, 2002. Oracle 9i PL/SQL Programming, McGraw-Hill/Osborn
  • http://www.experts-exchange.com/Databases/Oracle/Q_20984148.html
  • http://youngcow.net/doc/oracle10g/appdev.102/b14258/u_file.htm
  • http://www.adp-gmbh.ch/ora/plsql/utl_file.html
  • http://www.psoug.org/reference/utl_file.html

1 comment:

Anonymous said...

Mantep broo....
Ane tunggu tutorioal Oracle selanjutnya yaaaks...

Request duunk (boleh kaan?)
Kalo misalnya pengen bwt Procedur send mail dengan file attachment, gmn yaaks?? heheh makaciiy