PLSQL ile html dosya olusturmak

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||'<!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ı..

Create html from plsql

Plsql ile html dosya oluşturmak

Dosyamızı iexplorer, mozilla, google chrome vb bir browserla açıp içeriğine bakalım..

generate html from plsql

generate html from plsql,html with plsql

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..

Tagged: , , , , , , ,

1 comment

  1. omeracar 8 Ağustos 2014 at 00:17 Reply

    Benzer makalenin excel versiyonu için

    http://omeracar.com.tr/plsqlden-excel-rapor-dosyasi-olusturmak/

    linkine bakabilirsiniz..

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir