PLSQL ile html dosya olusturmak
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||'<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">'|| chr(13) || chr(10);
cBody:=cBody||'<html xmlns="http://www.w3.org/1999/xhtml">'|| chr(13) || chr(10);
cBody:=cBody||'<head>' || chr(13) || chr(10);
cBody:=cBody||'<style>'|| chr(13) || chr(10);
cBody:=cBody||' body { margin: 0 0 0 0; font-family:Tahoma; font-size:12px; color:#000000; padding: 0px; }'||chr(13)||chr(10);
cBody:=cBody||' table.tblmail { }'||chr(13)||chr(10);
cBody:=cBody||' td.tdh{background-color:#FFFF88; font-family:"Arial","sans-serif";; font-size:12px; padding-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; height: 20px; border-bottom: dotted 1px #686868; border-left: dotted 0px #686868; border-right: dotted 1px #686868; border-top: dotted 1px #686868; font-weight: bold; text-align: center; }'|| chr(13) || chr(10);
cBody:=cBody||' td.tdr{background-color:#E5E5E5; font-family:"Arial","sans-serif";; font-size:12px; padding-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; height: 20px; border-bottom: dotted 1px #686868; border-left: dotted 0px #686868; border-right: dotted 1px #686868; border-top: dotted 0px #686868; font-weight: normal; text-align: center; }'|| chr(13) || chr(10);
cBody:=cBody||'</style>'||chr(13)||chr(10);
cBody:=cBody||'</head>' ||chr(13)||chr(10);
cbody:=cbody||'<center>';
cBody:=cBody||'<body>' ||chr(13) || chr(10);
cBody:=cBody||'<br>'||chr(13) || chr(10);
cBody2:='';
cBody2:=cBody2||'<table class=tblmail border="1" width="1200px" height="5%" cellspacing="0" cellpadding="0" style="margin:0">'||chr(13)||chr(10);
cBody2:=cBody2||'<tr> <br>'|| chr(13) || chr(10);
cbody2:=cBody2||'<td colspan=10><font size=2 color=black><b><center>'||TO_CHAR(SYSDATE,'DD.MM.YYYY')||' HR PERSONEL LİSTESİ </center></b></font></td>';
cBody2:=cBody2||'</tr>'|| chr(13) || chr(10);
cBody2:=cBody2||'<tr>'|| chr(13) || chr(10);
cBody2:=cBody2||'<td class=tdh width="60px"> <font color=#FF0000>Çalışan id</font></td>'||chr(13)||chr(10);
cBody2:=cBody2||'<td class=tdh width="120px"><font color=#FF0000>Ad</font></td>'||chr(13)||chr(10);
cBody2:=cBody2||'<td class=tdh width="120px"><font color=#FF0000>Soyad</font></td>'||chr(13)||chr(10);
cBody2:=cBody2||'<td class=tdh width="120px"><font color=#FF0000>Email</font></td>'||chr(13)||chr(10);
cBody2:=cBody2||'<td class=tdh width="120px"><font color=#FF0000>Telefon</font></td>'||chr(13)||chr(10);
cBody2:=cBody2||'<td class=tdh width="100px"><font color=#FF0000>İşe Giriş Tarihi</font></td>'||chr(13)||chr(10);
cBody2:=cBody2||'<td class=tdh width="100px"><font color=#FF0000>İş Id</font></td>'||chr(13)||chr(10);
cBody2:=cBody2||'<td class=tdh width="100px"><font color=#FF0000>Maaş</font></td>' ||chr(13)||chr(10);
cBody2:=cBody2||'<td class=tdh width="100px"><font color=#FF0000>Yöneticisi</font></td>'||chr(13)||chr(10);
cBody2:=cBody2||'<td class=tdh width="100px"><font color=#FF0000>Departmanı</font></td>'||chr(13)||chr(10);
cBody2:=cBody2||'</tr>'||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||'<tr>'|| chr(13) || chr(10);
cBody3:=cBody3||'<td class=tdr align=center>' ||omer_rec_.EMPLOYEE_ID ||'</td>'|| chr(13) || chr(10);
cBody3:=cBody3||'<td class=tdr align=center>' ||omer_rec_.FIRST_NAME ||'</td>'|| chr(13) || chr(10);
cBody3:=cBody3||'<td class=tdr align=center>' ||omer_rec_.LAST_NAME ||'</td>'|| chr(13) || chr(10);
cBody3:=cBody3||'<td class=tdr align=center>' ||omer_rec_.EMAIL ||'</td>'|| chr(13) || chr(10);
cBody3:=cBody3||'<td class=tdr align=center>' ||omer_rec_.PHONE_NUMBER ||'</td>'|| chr(13) || chr(10);
cBody3:=cBody3||'<td class=tdr align=center>' ||omer_rec_.HIRE_DATE ||'</td>'|| chr(13) || chr(10);
cBody3:=cBody3||'<td class=tdr align=center>' ||omer_rec_.JOB_ID ||'</td>'|| chr(13) || chr(10);
--maaş 5000den büyükse kırmızıyla yaz...
IF omer_rec_.salary > 8000 THEN
cBody3:=cBody3||'<td class=tdr align=right><font color=red>'||omer_rec_.SALARY ||'</font></td>'|| chr(13) || chr(10);
ELSE
cBody3:=cBody3||'<td class=tdr align=right>' ||omer_rec_.SALARY ||'</td>'|| chr(13) || chr(10);
END IF;
cBody3:=cBody3||'<td class=tdr align=center>' ||omer_rec_.MANAGER ||'</td>'|| chr(13) || chr(10);
cBody3:=cBody3||'<td class=tdr align=center>' ||omer_rec_.DEPT_NAME ||'</td>'|| 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.
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)
utl_file.fopen(‘HTML_DIR’,'HR_CALISAN_LISTESI_’||TO_CHAR(SYSDATE,’DD.MM.YYYY’)||’.html’,'w’);
satırından değiştirebilirsiniz.
İş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; |
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||'<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">'|| chr(13) || chr(10); cBody:=cBody||'<html xmlns="http://www.w3.org/1999/xhtml">'|| chr(13) || chr(10); cBody:=cBody||'<head>' || chr(13) || chr(10); cBody:=cBody||'<style>'|| chr(13) || chr(10); cBody:=cBody||' body { margin: 0 0 0 0; font-family:Tahoma; font-size:12px; color:#000000; padding: 0px; }'||chr(13)||chr(10); cBody:=cBody||' table.tblmail { }'||chr(13)||chr(10); cBody:=cBody||' td.tdh{background-color:#FFFF88; font-family:"Arial","sans-serif";; font-size:12px; padding-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; height: 20px; border-bottom: dotted 1px #686868; border-left: dotted 0px #686868; border-right: dotted 1px #686868; border-top: dotted 1px #686868; font-weight: bold; text-align: center; }'|| chr(13) || chr(10); cBody:=cBody||' td.tdr{background-color:#E5E5E5; font-family:"Arial","sans-serif";; font-size:12px; padding-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; height: 20px; border-bottom: dotted 1px #686868; border-left: dotted 0px #686868; border-right: dotted 1px #686868; border-top: dotted 0px #686868; font-weight: normal; text-align: center; }'|| chr(13) || chr(10); cBody:=cBody||'</style>'||chr(13)||chr(10); cBody:=cBody||'</head>' ||chr(13)||chr(10); cbody:=cbody||'<center>'; cBody:=cBody||'<body>' ||chr(13) || chr(10); cBody:=cBody||'<br>'||chr(13) || chr(10); cBody2:=''; cBody2:=cBody2||'<table class=tblmail border="1" width="1200px" height="5%" cellspacing="0" cellpadding="0" style="margin:0">'||chr(13)||chr(10); cBody2:=cBody2||'<tr> <br>'|| chr(13) || chr(10); cbody2:=cBody2||'<td colspan=10><font size=2 color=black><b><center>'||TO_CHAR(SYSDATE,'DD.MM.YYYY')||' HR PERSONEL LİSTESİ </center></b></font></td>'; cBody2:=cBody2||'</tr>'|| chr(13) || chr(10); cBody2:=cBody2||'<tr>'|| chr(13) || chr(10); cBody2:=cBody2||'<td class=tdh width="60px"> <font color=#FF0000>Çalışan id</font></td>'||chr(13)||chr(10); cBody2:=cBody2||'<td class=tdh width="120px"><font color=#FF0000>Ad</font></td>'||chr(13)||chr(10); cBody2:=cBody2||'<td class=tdh width="120px"><font color=#FF0000>Soyad</font></td>'||chr(13)||chr(10); cBody2:=cBody2||'<td class=tdh width="120px"><font color=#FF0000>Email</font></td>'||chr(13)||chr(10); cBody2:=cBody2||'<td class=tdh width="120px"><font color=#FF0000>Telefon</font></td>'||chr(13)||chr(10); cBody2:=cBody2||'<td class=tdh width="100px"><font color=#FF0000>İşe Giriş Tarihi</font></td>'||chr(13)||chr(10); cBody2:=cBody2||'<td class=tdh width="100px"><font color=#FF0000>İş Id</font></td>'||chr(13)||chr(10); cBody2:=cBody2||'<td class=tdh width="100px"><font color=#FF0000>Maaş</font></td>' ||chr(13)||chr(10); cBody2:=cBody2||'<td class=tdh width="100px"><font color=#FF0000>Yöneticisi</font></td>'||chr(13)||chr(10); cBody2:=cBody2||'<td class=tdh width="100px"><font color=#FF0000>Departmanı</font></td>'||chr(13)||chr(10); cBody2:=cBody2||'</tr>'||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||'<tr>'|| chr(13) || chr(10); cBody3:=cBody3||'<td class=tdr align=center>' ||omer_rec_.EMPLOYEE_ID ||'</td>'|| chr(13) || chr(10); cBody3:=cBody3||'<td class=tdr align=center>' ||omer_rec_.FIRST_NAME ||'</td>'|| chr(13) || chr(10); cBody3:=cBody3||'<td class=tdr align=center>' ||omer_rec_.LAST_NAME ||'</td>'|| chr(13) || chr(10); cBody3:=cBody3||'<td class=tdr align=center>' ||omer_rec_.EMAIL ||'</td>'|| chr(13) || chr(10); cBody3:=cBody3||'<td class=tdr align=center>' ||omer_rec_.PHONE_NUMBER ||'</td>'|| chr(13) || chr(10); cBody3:=cBody3||'<td class=tdr align=center>' ||omer_rec_.HIRE_DATE ||'</td>'|| chr(13) || chr(10); cBody3:=cBody3||'<td class=tdr align=center>' ||omer_rec_.JOB_ID ||'</td>'|| chr(13) || chr(10); --maaş 5000den büyükse kırmızıyla yaz... IF omer_rec_.salary > 8000 THEN cBody3:=cBody3||'<td class=tdr align=right><font color=red>'||omer_rec_.SALARY ||'</font></td>'|| chr(13) || chr(10); ELSE cBody3:=cBody3||'<td class=tdr align=right>' ||omer_rec_.SALARY ||'</td>'|| chr(13) || chr(10); END IF; cBody3:=cBody3||'<td class=tdr align=center>' ||omer_rec_.MANAGER ||'</td>'|| chr(13) || chr(10); cBody3:=cBody3||'<td class=tdr align=center>' ||omer_rec_.DEPT_NAME ||'</td>'|| chr(13) || chr(10); utl_file.put_line(l_file, cBody3); END LOOP; --dosyayı kapat utl_file.fclose(l_file); END GUNLUK_RAPOR_OLUSTUR; |
C:\Oracle\HtmlRep\HR_CALISAN_LISTESI_07.08.2014.html adıyla oluşmuş olmalı..
* 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.
Kaydol:
Kayıt Yorumları
(
Atom
)
Hiç yorum yok :
Yorum Gönder