PLSQL ile html dosya olusturmak
Bu makalemizde plsql ile sql sorgu sonucumuzu bir oracle directory’sine html olarak oluşturacağız.
HR şemasındaki HR.employees tablosunu kullanacağız.Bu işlem için plsql’in UTL_FILE paketini kullanarak oluşturduğumuz html içeriğini dosyamıza yazıp dosyayı kapatacağız.
SQL sonucunu HR_CALISAN_LISTESI_DD.MM.YYYY.html adıyla oluşturacağız, burada dosyamızı günlük oluşturduğumuzu farz edelim, eğer gün içinde birden fazla çalıştırılırsa var olan dosyayı yenisiyle ezeceketir, hata vermeyecektir.
Html dosyamızda örnek teşkil etmesi için bi de şart verelim, maaşı 5000 den büyük çalışanlar için maaş kolonunu kırmızı yapalım.(Bloktaki IF li satır)
Oluşacak dosya adını;
utl_file.fopen(‘HTML_DIR’,’HR_CALISAN_LISTESI_’||TO_CHAR(SYSDATE,’DD.MM.YYYY’)||’.html’,’w’);
satırından değiştirebilirsiniz.
Öncelikle bi directory oluşturup HR’a yetki verelim..(SYS ile yapıyoruz)
İşletim sistemi tarafında da dizinimizi oluşturalım > C:\Oracle\HtmlRep
SQL> CREATE OR REPLACE DIRECTORY HTML_DIR AS 'C:\Oracle\HtmlRep';
SQL> GRANT READ,WRITE,EXECUTE ON DIRECTORY HTML_DIR TO HR;
Şimdi de html dosyayı oluşturacak plsql procedürümüzü yazalım..(HR ile)
CREATE OR REPLACE PROCEDURE GUNLUK_RAPOR_OLUSTUR IS
l_file UTL_FILE.file_type;
l_file_name VARCHAR2(1000);
cBody LONG DEFAULT NULL;
cBody2 LONG DEFAULT NULL;
cBody3 LONG DEFAULT NULL;
BEGIN
cBody:='';
cBody:=cBody||''|| chr(13) || chr(10);
cBody:=cBody||''|| chr(13) || chr(10);
cBody:=cBody||'' || chr(13) || chr(10);
cBody:=cBody||''||chr(13)||chr(10);
cBody:=cBody||'' ||chr(13)||chr(10);
cbody:=cbody||'';
cBody:=cBody||'' ||chr(13) || chr(10);
cBody:=cBody||'
'||chr(13) || chr(10);
cBody2:='';
cBody2:=cBody2||''||chr(13)||chr(10);
cBody2:=cBody2||'
'|| chr(13) || chr(10);
cbody2:=cBody2||''||TO_CHAR(SYSDATE,'DD.MM.YYYY')||' HR PERSONEL LİSTESİ ';
cBody2:=cBody2||' '|| chr(13) || chr(10);
cBody2:=cBody2||''|| chr(13) || chr(10);
cBody2:=cBody2||' Çalışan id '||chr(13)||chr(10);
cBody2:=cBody2||'Ad '||chr(13)||chr(10);
cBody2:=cBody2||'Soyad '||chr(13)||chr(10);
cBody2:=cBody2||'Email '||chr(13)||chr(10);
cBody2:=cBody2||'Telefon '||chr(13)||chr(10);
cBody2:=cBody2||'İşe Giriş Tarihi '||chr(13)||chr(10);
cBody2:=cBody2||'İş Id '||chr(13)||chr(10);
cBody2:=cBody2||'Maaş ' ||chr(13)||chr(10);
cBody2:=cBody2||'Yöneticisi '||chr(13)||chr(10);
cBody2:=cBody2||'Departmanı '||chr(13)||chr(10);
cBody2:=cBody2||' '||chr(13)||chr(10);
-- dosya dizin ve adı burada tanımlıyoruz.
l_file := utl_file.fopen('HTML_DIR','HR_CALISAN_LISTESI_'||TO_CHAR(SYSDATE,'DD.MM.YYYY')||'.html','w');
utl_file.put_line(l_file, cBody);
utl_file.put_line(l_file, cBody2);
FOR omer_rec_ IN( SELECT
EMPLOYEE_ID,
FIRST_NAME ,
LAST_NAME,
EMAIL ,
PHONE_NUMBER,
TO_CHAR(HIRE_DATE,'DD.MM.YYYY')HIRE_DATE,
JOB_ID,
SALARY,
(SELECT h.first_name||' '||h.last_name FROM hr.employees h WHERE h.employee_id=g.manager_id)MANAGER,
(SELECT f.department_name FROM hr.departments f WHERE f.department_id=g.department_id) DEPT_NAME
FROM hr.employees g
ORDER BY EMPLOYEE_ID
) LOOP
cBody3:='';
cBody3:=cBody3||''|| chr(13) || chr(10);
cBody3:=cBody3||'' ||omer_rec_.EMPLOYEE_ID ||' '|| chr(13) || chr(10);
cBody3:=cBody3||'' ||omer_rec_.FIRST_NAME ||' '|| chr(13) || chr(10);
cBody3:=cBody3||'' ||omer_rec_.LAST_NAME ||' '|| chr(13) || chr(10);
cBody3:=cBody3||'' ||omer_rec_.EMAIL ||' '|| chr(13) || chr(10);
cBody3:=cBody3||'' ||omer_rec_.PHONE_NUMBER ||' '|| chr(13) || chr(10);
cBody3:=cBody3||'' ||omer_rec_.HIRE_DATE ||' '|| chr(13) || chr(10);
cBody3:=cBody3||'' ||omer_rec_.JOB_ID ||' '|| chr(13) || chr(10);
--maaş 5000den büyükse kırmızıyla yaz...
IF omer_rec_.salary > 8000 THEN
cBody3:=cBody3||''||omer_rec_.SALARY ||' '|| chr(13) || chr(10);
ELSE
cBody3:=cBody3||'' ||omer_rec_.SALARY ||' '|| chr(13) || chr(10);
END IF;
cBody3:=cBody3||'' ||omer_rec_.MANAGER ||' '|| chr(13) || chr(10);
cBody3:=cBody3||'' ||omer_rec_.DEPT_NAME ||' '|| chr(13) || chr(10);
utl_file.put_line(l_file, cBody3);
END LOOP;
--dosyayı kapat
utl_file.fclose(l_file);
END GUNLUK_RAPOR_OLUSTUR;
Procedürümüzü çalıştırdıktan sonra dizinimize gidip dosyamıza bakalım..
C:\Oracle\HtmlRep\HR_CALISAN_LISTESI_07.08.2014.html adıyla oluşmuş olmalı..
Dosyamızı iexplorer, mozilla, google chrome vb bir browserla açıp içeriğine bakalım..
Html içeriği düzgün görünüyor, maaş sütunu da 5000’den büyükler için kırmızı yazıyla oluşmuş durumda..
Notlar:
cBody,cBody2,cBody3 long değişkenlerimiz, bunların içine html içeriğimizi oluşturup dosyamıza yazdırdık..
Kullandığımız özellikleri yazarsak;
* chr(13) || chr(10) plsql’de alt satıra geçmek için kullandık.( CHR için daha fazla bilgi )
* center ortalamaya yarar.
* br alt satıra geçirir(Enter gibi düşünebiliriz)
* font tagi ile yazı özelliklerini tanımlarız, color,size gibi..
* td ve tr tablo çizdirmek için kullandım.
* bgcolor arkaplan rengini ayarladık.
Eğer sizin de bunun gibi günlük dosya üretip bir dizine bırakmanız gerekiyorsa bu procedürü bir joba bağlayarak otomatik hale getirmeniz güzel olur.
Umarım faydalı olmuştur..