Tuesday, December 12, 2006

Generate file dari Oracle Procedure

kemaren itu chating ma temen gua yang anak I-SAT.tiba tiba dia nanya , "Co,lo punya script kgk yang generate
file dari hasil running job".ya jujur aja gua blom pernah nyoba untuk hal hal yang seperti ini.Tp akhirnya bs
jg generate file dari Oralce Procedure.Hehehehehe.Seneng bgt kleee gua.

Bagaimana caranya untuk Generate file dari Oracle Procedure
1.Siapin Environment nya yaitu
*.connect sebagai system
*.Create directory [Directory_File_Name] as 'Directory';
Windows --> Create directory [Directory_File_Name] as 'C:\ORACLE';
Solaris --> Create directory [Directory_File_Name] as '/oracle/utl_file';
*.Grant read on directory [Directory_File_Name] to public;
*.Grant write on directory [Directory_File_Name] to public;
2.Cek parameter yang di buat
*.select * from all_directories;
data yang ada harus sesuai dengan Enviroment yang di buat pada Step 1.
3.Buat Folder pada directory sesuai dengan directory yang di create pada step 2.

4.Create Procedure

/* procedure nya di buat dengan format file name sesuai dengan tanggal. */

CREATE OR REPLACE
PROCEDURE tofile
is

file_id UTL_FILE.FILE_TYPE;
TGL varchar2(64);

BEGIN
select to_char(sysdate,'DDMMYYYY')
INTO TGL
FROM dual;

file_id := utl_file.fopen('UTL_FILE_TMP',TGL||'.[Type_file]','w');
utl_file.put_line(file_id,'TOPIC'||','||'SEQ'||','||'INFO');

FOR rec_i in (select Column1,Column2,Column3,.... from Schema.Table_name)
LOOP
utl_file.put_line(file_id,rec_i.Column1||','||rec_i.Column2||','||.......);
end loop;
utl_file.fclose(file_id);

exception when utl_file.invalid_path THEN
RAISE_APPLICATION_ERROR(-20001, 'utl_file.invalid_path');
WHEN utl_file.invalid_mode THEN
RAISE_APPLICATION_ERROR(-20001, 'utl_file.invalid_mode');
WHEN utl_file.invalid_filehandle THEN
RAISE_APPLICATION_ERROR(-20001, 'utl_file.invalid_filehandle');
WHEN utl_file.invalid_operation THEN
RAISE_APPLICATION_ERROR(-20001, 'utl_file.invalid_operation');
WHEN utl_file.read_error THEN
RAISE_APPLICATION_ERROR(-20001, 'utl_file.read_error');
WHEN utl_file.write_error THEN
RAISE_APPLICATION_ERROR(-20001, 'utl_file.write_error');
WHEN utl_file.internal_error THEN
RAISE_APPLICATION_ERROR(-20001, 'utl_file.internal_error');
WHEN OTHERS THEN
RAISE_APPLICATION_ERROR(-20001, 'utl_file.other_error');
END;