Etiket arşivi: plsql ile html rapor olusturmak

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||''||  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||''; cBody2:=cBody2||''|| chr(13) || chr(10); cBody2:=cBody2||''|| chr(13) || chr(10); cBody2:=cBody2||''||chr(13)||chr(10); cBody2:=cBody2||''||chr(13)||chr(10); cBody2:=cBody2||''||chr(13)||chr(10); cBody2:=cBody2||''||chr(13)||chr(10); cBody2:=cBody2||''||chr(13)||chr(10); cBody2:=cBody2||''||chr(13)||chr(10); cBody2:=cBody2||''||chr(13)||chr(10); cBody2:=cBody2||'' ||chr(13)||chr(10); cBody2:=cBody2||''||chr(13)||chr(10); cBody2:=cBody2||''||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||''|| chr(13) || chr(10); cBody3:=cBody3||''|| chr(13) || chr(10); cBody3:=cBody3||''|| chr(13) || chr(10); cBody3:=cBody3||''|| chr(13) || chr(10); cBody3:=cBody3||''|| chr(13) || chr(10); cBody3:=cBody3||''|| chr(13) || chr(10); cBody3:=cBody3||''|| chr(13) || chr(10); --maaş 5000den büyükse kırmızıyla yaz... IF omer_rec_.salary > 8000 THEN cBody3:=cBody3||''|| chr(13) || chr(10); ELSE cBody3:=cBody3||''|| chr(13) || chr(10); END IF; cBody3:=cBody3||''|| chr(13) || chr(10); cBody3:=cBody3||''|| 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..

'||TO_CHAR(SYSDATE,'DD.MM.YYYY')||' HR PERSONEL LİSTESİ
Çalışan idAdSoyadEmailTelefonİşe Giriş Tarihiİş IdMaaşYöneticisiDepartmanı
' ||omer_rec_.EMPLOYEE_ID ||'' ||omer_rec_.FIRST_NAME ||'' ||omer_rec_.LAST_NAME ||'' ||omer_rec_.EMAIL ||'' ||omer_rec_.PHONE_NUMBER ||'' ||omer_rec_.HIRE_DATE ||'' ||omer_rec_.JOB_ID ||''||omer_rec_.SALARY ||'' ||omer_rec_.SALARY ||'' ||omer_rec_.MANAGER ||'' ||omer_rec_.DEPT_NAME ||'