Minggu, 09 Januari 2011

SIMPLE REPORT

Mengatur Dimensi Halaman
Dimensi halaman dari keluaran SQL*Plus dapat diatur melalui system variable PAGESIZE dan LINESIZE. System variable PAGESIZE menentukan jumlah baris maksimum yang ditampilkan dalam satu halaman. Sedangkan system variable LINESIZE menentukan jumlah karakter maksimum yang ditampilkan dalam satu baris. Dengan demikian kedua system variable ini dapat mengatur tinggi dan lebar dari halaman keluaran SQL*Plus.
Berikut ini ditunjukkan dua perintah SET untuk menentukan nilai system variable PAGESIZE dan LINESIZE pada current environment SQL*Plus.
SQL> set  pagesize 12
SQL> set  linesize 60
Dengan environment seperti di atas, coba lakukan sebuah query seperti berikut ini. Query tersebut menampilkan 15 baris string karakter yang masing-masing panjangnya 60 bytes. Data dictionary DICTIONARY digunakan sebagai sumber data hanya karena jumlah baris data yang ada pada view tersebut pasti lebih dari 15 baris.

SQL> SELECT ‘**********$$$$$$$$$$**********$$$$$$$$$$’
  2  ||’ **********$$$$$$$$$$’ pages
  3  FROM DICTIONARY
  4  WHERE ROWNUM<=15;

PAGES
------------------------------------------------------------
**********$$$$$$$$$$**********$$$$$$$$$$**********$$$$$$$$$$
**********$$$$$$$$$$**********$$$$$$$$$$**********$$$$$$$$$$
**********$$$$$$$$$$**********$$$$$$$$$$**********$$$$$$$$$$
**********$$$$$$$$$$**********$$$$$$$$$$**********$$$$$$$$$$
**********$$$$$$$$$$**********$$$$$$$$$$**********$$$$$$$$$$
**********$$$$$$$$$$**********$$$$$$$$$$**********$$$$$$$$$$
**********$$$$$$$$$$**********$$$$$$$$$$**********$$$$$$$$$$
**********$$$$$$$$$$**********$$$$$$$$$$**********$$$$$$$$$$
**********$$$$$$$$$$**********$$$$$$$$$$**********$$$$$$$$$$
PAGES
------------------------------------------------------------
**********$$$$$$$$$$**********$$$$$$$$$$**********$$$$$$$$$$
**********$$$$$$$$$$**********$$$$$$$$$$**********$$$$$$$$$$
**********$$$$$$$$$$**********$$$$$$$$$$**********$$$$$$$$$$
**********$$$$$$$$$$**********$$$$$$$$$$**********$$$$$$$$$$
**********$$$$$$$$$$**********$$$$$$$$$$**********$$$$$$$$$$
**********$$$$$$$$$$**********$$$$$$$$$$**********$$$$$$$$$$
15 row selected
Perhatikan hasil query di atas. Suatu halaman di mulai dengan satu baris kosong. Setelah itu diikuti oleh judul baris kolom (heading) dan baris garis-bawah judul kolom. Kemudian, dibawahnya ditampilkan baris-baris data. Apabila panjang baris judul kolom (atau baris data) lebih besar dari LINESIZE, baris tersebut ditampilkan dalam dua baris atau lebih. Apabila baris-baris yang ditampilkan tidak cukup ditampung dalam satu halaman, akan dibuat halaman baru yang terdiri atas satu baris kosong, judul kolom, garis-bawah judul kolom, dan baris-baris data. Demikian seterusnya sampai semua data ditampilkan. Penutup dari halaman terkahir adalah sebuah baris kosong, dan atribut-atribut lainnya seperti FEEDBACK dan TIMING. Apabila PAGESIZE diberi nilai 0 (nol), yang ditampilkan hanya baris-baris data saja tanpa awalan baris kosong, judul kolom, garis-bawah judul kolom dan atribut-atribut lainnya. Baris kosong yang berada sebelum baris judul kolom sebenarnya dapat ditentukan jumlahnya dengan mengatur system variable NEWPAGE. Pada keluaran hasil query di atas, nilai NEWPAGE yang digunakan adalah satu (default). Perlu diinformasikan juga bahwa Anda dapat melihat nomor baris yang sedang ditampilkan dari sebuah halaman menggunakan perintah SHOW LNO. Nomor halaman dapat dilihat dengan perintah SHOW PNO.
Apabila tidak disebutkan secara khusus, PAGESIZE dan LINESIZE yang digunakan pada pokok-pokok bahasan berikutnya didalam bab ini adalah 50 dan 65.

Menggunakan BREAK
Perintah BREAK dapat digunakkan untuk hal-hal seperti berikut ini.
Ø  Menampilkan hanya satu nilai untuk beberapa nilai yang sama pada kolom yang ditentukan.
Ø  Menambahkan baris kosong setiap kali nilai dari kolom yang ditentukan berubah.
Ø  Mencetak nilai hasil perhitungan untuk kelompok baris dengan nilai kolom yang sama pada kolom yang ditentukan (lihat pokok batasan berikutnya).
Bentuk umum perintahnya adalah sebagai berikut.
BRE[AK] [{ ON <column | expr | ROW | REPORT>
    [SKIP n | [SKIP] PAGE] [NODUP[LICATES] | DUP[LICATES]] }]



Nama  column tidak boleh mengandung schema dan/atau table. Untuk kolom-kolom yang menggunakan format “tab_name,col_name” di dalam SQL statement-nya, sebaiknya berikan kolom alias pada SQL statement tersebut sehingga nama kolom alias tersebut dapat digunakan pada perintah BREAK.
Jika expr digunakan, break tersebut berlaku jika expr terdapat pada SQL statement dan tanpa menggunakan kolom alias.
  • Pilihan ON ROW digunakan untuk break setiap kali baris berikutnya berbeda dengan baris sebelumnya.
  • ON REPORT biasanya digunakan bersamaan dengan kalkulasi untuk keseluruhan data (lihat perintah COMPUTE pada pokok bahasan berikutnya).
  • “SKIP n” dapat digunakan untuk memberikan baris kosong sebanyak n baris setiap  masuk ke break berikutnya. Apabila SKIP PAGE digunakan keluaran diceyak di halaman berikutnya setiap kali break terjadi.
  • NODUP[LICATES] digunakan apabila nilai-nilai yang duplikat tida ingin dicetak. Pilihan ini adalah default.
  • DUP[LICATES] digunakan apabila nilai-nilai yang duplikat ingin dicetak.

Berikut ini diberikan sebuah contoh penggunaan perintah BREAK untuk kolom bayar. Sebuah baris kosong dicetak setiap kali break terjadi.
SQL> break on bayar skip 1
SQL> SELECT nim, prodi, nama, bayar
  2      FROM mahasiswa ORDER BY nim;
NIM
NAMA
PRODI
BAYAR
------------------------------------------------------------------------------------------------
30107001
ANGGI NOVEMBRA
MI
2000000




30107003
WIDO KESUMA
MI
2000000




30107004
MURDIJAT ARIF PRABOWO
MI
15000000




30207005
TK ANUGRAH DWI ARDIANTO

8000000




30207006
ANDRE ADRIAN
TK
2000000




30207007
ANDI HAKIM ARIF
TK
4000000




30307008
SWANDY EFRAIM MANALU
KA
10000000




30307009
SITI NURFAUZIYAH
KA
3500000


Bagaimana jika ingin menggunakan banyak criteria break? Anda dapat menggunakan klausa ON sebanyak criteria yang diinginkan. Contoh-contoh break dapat ditemukan pada pokok-pokok bahasan berikutnya. Apabila perintah BREAK dijalankan tanpa klausa ON, perintah tersebut ditujukan untuk memunculkan perintah BREAK yang terakhir. Sebagai contoh ditunjukkan di bawah ini.
SQL> break
Break on bayar skip 1 nodup



Perlu diingat bahwa setiap kali perintah BREAK dijalankan, perintah tersebut berlaku sampai perintah BREAK berikutnya dijalankan atau sampai CLEAR BREAKS dijalankan. Perintah CLEAR BREAKS berguna untuk menghapus definisi break yang ada seperti yang ditunjukkan seperti ini.
SQL> clear breaks
Breaks cleared



Melakukan Kalkulasi dengan COMPUTE

Perintah COMPUTE dapat digunakan untuk melakukan perhitungan terhadap sebuah kolom yang ekspresi dari sekelompok baris data. Bentuk umum perintahnya adalah sebagai berikut.
COMPUTE [ {function [LAB[EL] text]} OF <expr | column>
    ON <expr | column | REPORT | ROW> ]



Satu perintah COMPUTE dapat menggunakan lebih dari satu fungsi. dengan urutan pengerjaan COMPUTE.
  • Label text dapat diberikan untuk membuat text menjadi tanda atau cap pada baris hasil COMPUTE. Jika  tidak diberikan, default text adalah nama fungsi.
  • Klausa OF berfungsi untuk menentukan expr atau kolom apa yang dikalkulasi.
  • KLAUSA ON berfungsi untuk menentukan criteria break untuk satu perhitungan COMPUTE.
Sebagai catatan, hasil dari perintah COMPUTE hanya dicetak jika perintah BREAK disertakan. Nama column atau expr pada klausa ON perintah COMPUTE harus ada pada klausa ON perintah BREAK tersebut.

Fungsi-fungsi untuk Perintah COMPUTE
Nama Fungsi
Perhitungan
Tipe Data
AVG
Nilai rata-rata. Baris yang diperhitungkan hanya baris dengan nilai yang tidak NULL
NUMBER
COU[NT]
Menghitung jumlah baris yang nilai column atau expr-nya tidak NULL
Semua
MIN[MUM]
Nilai minimum
NUMBER, CHAR, VARCHAR2
MAX[MUM]
Nilai maksimum
NUMBER, CHAR, VARCHAR2
NUM[BER]
Menghitung jumlah baris, termasuk yang bernilai NULL
Semua
SUM
Jumlah nilai
NUMBER
SID
Standar deviasi dari nilai column atau expr yang tidak NULL
NUMBER
VAR[IANCE]
Variance dari nilai column atau expr yang tidak NULL
NUMBER


Berikut ini diberikan sebuah contoh perhitungan rata-rata, nilai minimum, dan nilai maksimum dari bayar yang dikelompokkan prodi. Pengurutan data (ORDER BY) juga berpengaruh pada keluaran. Perhatikan juga, BREAK dikenakan pada kolom departemen dengan skip satu baris dan pada kolom pos_id tanpa skip.

SQL> break on prodi skip 2;
SQL> compute avg max min of bayar on prodi;
SQL> select nim, nama, prodi, bayar from mahasiswa order by prodi;

NIM
NAMA
PRODI
BAYAR
30307009
SITI NURFAUZIYAH
KA
3500000
30307008
SWANDY EFRAIM MANALU
 
10000000
 
 
*****
----------
 
 
avg
6750000
 
 
minimum
3500000
 
 
maximum
10000000
30107003
WIDO KESUMA
MI
2000000
30107001
ANGGI NOVEMBRA
 
2000000
30107004
MURDIJAT ARIF PRABOWO
 
15000000
 
 
*****
----------
 
 
avg
6333333,33
 
 
minimum
2000000
 
 
maximum
15000000
30207007
ANDI HAKIM ARIF
TK
4000000
30207005
ANUGRAH DWI ARDIANTO
 
8000000
30207006
ANDRE ADRIAN
 
2000000
 
 
*****
----------
 
 
avg
4666666,67
 
 
minimum
2000000
 
 
maximum
8000000
8 rows selected.

Sebagai  catatan tambahan, semua atribut yang telah ditentukan dengan perintah COMPUTE dapat dihapus menggunakan perintah CLEAR COMPUTES.

Perintah COLUMN Untuk Memformat Kolom

Perintah ini digunakan untuk memformat judul kolom maupun nilai kolom. Bentuk umum perintahnya adalah sebagai berikut.
COL[UMN] [<column | expr > {[option]}]



Apanila perintah COLUMN digunakan tanpa column atau expr maka SQL*Plus akan mengeluarkan atribut COLUMN yang sedang berlaku pada session SQl*Plus tersebut (bukan session user database). Apabila perintah COLUMN digunakan dengan menyertakan column atau expr namun tanpa option, SQL*Plus akan mengeluarkan atribut COLUMN untuk kolom atau ekspresi yang disebutkan.

Nilai option dapat berupa klausa-klausa yang diperhatikan pada Tabel.

Tabel  Option pada Perintah COLUMN
Klausa
Desripsi
ALI[AS] alias
Memberi nama alias yang dapat digunakan untuk menggantikan nama column pada perintah BREA, COMPUTE, ataupun COLUMN
CLE[AR]
Mengembalikan atribut colomn ke nilai default sesuai dengan tipe data, panjang data, dan sebagainya
FOLD_A[FTER]
Menambahkan karakter baris baru (carriage return) setelah judul column dan setelah nilai column dari setiap baris. Tidak berlaku untuk kolom terakhir pada klausa SELECT
FOLD_B[EFORE]
Menambahkan karakter baris baru (carriage return) sebelum judul column dan setelah nilai column dari setiap baris. Tidak berlaku untuk kolom pertama pada klausa SELECT
FOR[MAT] format
Menentukan format tampilan nilai column. Format untuk kolom karakter berupa “An” dimana n adalah lebar kolom. Format untuk kolom DATE mengikuti NLS_DATE_FORMAT namun lebar kolomnya apat ditentukan dengan “An”. Format untuk kolom NUMBER sama dengan format yang digunakan pada fungsi TO_CHAR(NUMBER) yang ditampilkan pada Tabel 3.7 pokok bahasan 3.5.2. *)
HEA[DING]
Menentukan text sebagai judul kolom untuk menggantikan judul kolom yang diberikan di dalam SELECT statement. String karakter text dapat mengandung karakter HEADSEP untuk menampilkan judul kolom dalam dua baris atau lebih.
JUS[TIFY]
<L[EFT]|C[ENTER]
Menentukan apaah judul kolom dan nilai kolom ditampilkan rata kiri, di tengah-tengah.
R[IGHT]>
Atau rata kanan. Jika tidak disebutkan maka kolom NUMBER ditampilkan rata kanan dan kolom lainnya rata kiri
LIKE[expr|alias]
Menyalin atribut tampilan dari kolom lain. Atribut yang disalin hanya atribut yang tidak ditemtukan secara eksplisit.
NEWL[INE]
Sama efeknya dengan FOLD_BEFORE, yakni menampilkan baris baru sebelum nilai column ditampilkan
NEW_V[ALUE] variable
Digunakan untuk membuat variable yang nilainya adalah nilai kolom. Variable tersebut biasanya digunakan pada perintah TITLE untuk membuat judul-atas pada laporan master detail. Agar pengaruhnya terlihat, kolom pada perintah ini harus digunakan juga apada perintah “BREAK…SKIP PAGE”
NOPRI[NT]|PRI[NT]
Mengatur apakah judul dan nilai column dicetak di layar (ON) atau tidak (OFF). Default adalah OFF
NUL[L] text
Menentukan text sebagai nilai yang dicetak pada kolom yang ditentukan
OLD_V[ALUE] variable
Digunakan untuk membuat variable yang nilainya adalah nilai kolom. Variable tersebut biasanya digunakan pada perintah BTITLE untuk membuat judul-bawah pada laporan master detail. Kolom pada perintah ini harus digunakan juga pada perintah “BREAK…SKIP PAGE”
ON|OFF
Mengaktifkan (ON) atau menonaktifkan (OFF) atribut-atribut kolom yang sudah didefinisikan
WRA[PPED]|WOR[D_WRAPPED|TRU[NCATE]
Perintah ini khusus untuk kolom DATE atau karakter yang lebarnya ditentukan namun nilai kolom tersebut melebihi lebar kolom yang disediakan. Pilihan WRAPPED akan melanjutkan bagian yang tidak mencukupi ke baris yang baru pada kolom yang sama. Pilihan

WORD_WRAPPED akan melanjutkan kata-kata yang tidak mencukupi ke baris yang baru pada kolom yang sama . Pilih TRUNCATE akan memotong bagian yang tidak mencukupi.
*) Format yang tercantum pada table 3.7 hampir semuanya berlaku kecuali: FM, TM, U, dan X. Selain itu ada tambahan format “DATE” yang bertujuan untuk menampilkan nilai NUMBER sebagai Julian_date dalam format DD/MM/YY.

Berikut ini diberikan sebuah contoh performatan kolom-kolom dari data-data mahasiswa. Petrintah-perintah tersebut ditulisakan di dalam script “rpt_mahasiswa.sql”.
--rpt_mahasiswa.sql

/* Mengatur beberapa nilai system variable*/
SET PAGESIZE 600
SET LINESIZE 950
SET HEADSEP "|"
SET RECSEP OFF

/*Menghapus BREAKS, COMPUTES, dan COLUMNS*/
CLEAR BREAKS;
CLEAR COMPUTES;
CLEAR COLUMNS;

/*Mengatur format kolom*/
COLUMN nim FORMAT A10 WORD_WRAPPED
COLUMN nama FORMAT A20 WORD_WRAPPED
COLUMN prodi FORMAT A10 WORD_WRAPPED HEADING "PRODI|JUR"
COLUMN bayar FORMAT 99G999G999D99

/*Query untuk menampilkan data-data mahasiswa*/
select nim, nama, prodi, bayar from mahasiswa ORDER BY 1,2;

Keluaran dari script diatas ditujukan berikut ini.
SQL> @ C\:rpt_mahasiswa.sql
NIM
NAMA
PRODI
JUR
BAYAR
30107001
ANGGI NOVEMBRA
MI
2.000.000,00
30107003
WIDO KESUMA
MI
2.000.000,00
30107004
MURDIJAT ARIF
PRABOWO
MI
15.000.000,00
30207005
ANUGRAH DWI ARDIANTO
TK
8.000.000,00
30207006
ANDRE ADRIAN
TK
2.000.000,00
30207007
ANDI HAKIM ARIF
TK
4.000.000,00
30307008
SWANDY EFRAIM MANALU
KA
10.000.000,00
30307009
SITI NURFAUZIYAH
KA
3.500.000,00
8 rows selected.


Perhatikan script dan keluaran di atas. Perhatikan pula bagian-bagian yang diberi latar abu-abu. Lebar kolom prodi ditentukan sebesar 10 karakter. Judulnya menjadi PRODI JUR dan dituliskan dalam dua baris (HEADING “PRODI | JUR”). Lebar kolom nama ditentukan sebesar 20 karakter dan diberikan pilihan WORD_WRAPPED. Dengan demikian maka string posisi yang lebih dari 20 karakter akan dituliskan dalam dua baris.
Lihatlah nama “MURDIJAT ARIF PRABOWO” yang nama terakhirnya di-wrap. Kolom bayar diformat dengan pemisah grup (ribuan) dan diberi tanda decimal (tanda titik). Jumlah angka pecahan decimal adalah dua angka. Sebagai catatan tambahan, semua atribut tampilan yang ditentukan oleh perintah COLUMN dapat dihapus dengan menggunakan perintah CLEAR COLUMNS.


Memberi Judul pada Halaman
Judul halaman dapat diberikan dengan menggunakan perintah TTITLE dan BTIITLE. TTITLE untuk judul atas, sedangkan BTITLE untuk judul bawah. Bentuk umum kedua perintah ini diperlihatkan di bawah ini.
           
           
TTITLE{[printspec [text | variable ]]} [ON|OFF]

       BTITLE{[printspec [text | variable ]]} [ON|OFF]


Nilai printcpec bertujuan untuk menentukan spesifikasi cetak dari text atau variable. Pilihan-pilihan untuk printspec diberikan pada Tabel.

Tabel  Spesifikasi Cetak pada Perintah TTITLE dan BTITLE
Spesifikasi Cetak
Kegunaan
COL n
Menentukan posisi ceak dimulai dari kolom ke n.
S[KIP] [n]
Memulai baris baru n berikutnya dari baris sebelumnya. Jika n tidak disertakan, n=1. Jika n=0, text atau variable dicetak pada baris berikutnya
TAB n
Menambahkan tab maju sebanyak n.Jika n negative, yang dicetak adalah tab mundur
LE[FT] | CE[NTER] | R[IGHT]
Menentukan apakah judul dicetak rapat kiri, di tengah , atau rapat kanan
BOLD
Mencetak dengan huruf tebal. Pada SQL*Plus disimbolkan dengan mencetak text atau variable sebanyak tiga kali. Beberapa system operasi dapat menerjemahkan menjadi cetak tebal apabila dicetak ke printer
FORMAT format
Menentukan format. Format yang valid adalah yang berlaku untuk perintah COLUMN.

Nilai variable dapat diisi dengan user variable, termasuk variable yang dibuat dengan perintah COLUMN, dan juga dapat diisi dengan nilai-nilai system SQL*Plus. Nilai-nilai system SQL*Plus dapat berupa salah satu dari daftar berikut ini.
Ø  SQL.LNO, untuk menampilkan nomor dari current line.
Ø  SQL.PNO, untuk menampilkan nomor dari current page.
Ø  SQL.RELEASE, untuk menampilkan nomor release Oracle.
Ø  SQL.ERRORCODE, untuk menampilkan kode kesalahan.
Ø  SQL.USER, untuk menampilkan nama current user.
Kecuali SQL.ERRORCODE, nilai-nilai pada daftar di atas dapat juga ditampilkan menggunakan perintah SHOW. Namun, perintah SHOW tidak dapat yang sudah pernah diberikan. Pilihan ON atau OFF dapat diberikan untuk mengaktifkan ayau menonaktifkan TIITLE atau BTIITLE tanpa harus menghapus definisi yang sudah diberikan. Jika perintah TIITLE atau BTIITLE digunakan tanpa klausa apapun, perintah tersebut ditujukan untuk menampilkan definisi dari TIITLE atau BTIITLE yang sedang berlaku.


Menambahkan Report Header dan Footer
Perintah untuk menambahkan report header dan report footer hampir sama dengan perintah TTITLE dab BTITLE. Bentuk umum perintahnya adalah sebagai berikut.

REPH[EADER] [PAGE] {[printspec [text | variable ]]} [ON|OFF]

REPF[OOTER] [PAGE] {[printspec [text | variable ]]} [ON|OFF]



Jika pilihan PAGE disertakan, halaman baru akan dibuat setelah report header ditampilkan atau sebelum report footer ditampilkan. Pilihan-pilihan lainnya sama fungsinya dengan fungsi pilihan pada perintah TTITLE atau BTITLE.

Tidak seperti judul halaman, report header dan report footer hanya satu kali dicetak untuk satu SELECT statement. Jika SELECT Statement menghasilkan banyak baris data sehingga membutuhkan tempat lebih dari satu halaman, judul halaman (TITILE dan BTITLE) akan dicetak sebanyak halaman yang ada. Sedangkan report header ditampilkan sebelum SELECT statement diproses dan report footer ditampilkan setelah SELECT statement diproses. Jadi, yang dianggap satu report adalah satu SELECT statement. Report header dan report footer digunakan bersama-sama dengan judul-atas dan judul-bawah halaman.

Menambahkan Tanggal
Untuk menambahkan konstanta tanggal, tentunya dapat digunakan perintah TTITLE. Namun, untuk menambahkan tanggal sesuai dengan tanggal script dijalankan, dibutuhkan “kerjasama” antara perintah COLUMN, SQL, statement, dan TTITLE/BTITLE (atau REPHEADER/REPFOOTER). Perintah COLUMN digunakan untuk menampung nilai user variable. SQL statement digunakan untuk menampung nilai SYSDATE ke dalam user variable. Perintah TTITLE digunakan untuk mencetaknya.
Berikut ini diberikan sebuah contoh sederhana. Perintah COLUMN digunakan untuk membuat variable tg_skrg (NEW_VALUE) yag nilainya diambil dari kolom today. Kolom today dipilih pada SELECT statement dan nilainya adalah SYSDATE. Perintah TTITLE ditujukan untuk mencetak nilai dari variable tgl_skrg. 




Menyimpan dan Mencetak Laporan
Seperti yang telah disinggung pada awal bab ini, semua yang dipaparkan di dalam subbab ini berguna untuk membuat sebuah laporan berdasarkan data yang ada di dalam database. Biasanya, perintah-perintah dari sebuah laporan, termasuk pengaturan environment yang berhubungan dengan tampilan, disimpan di dalam file (script) agar dapat digunakan secara berulang. Hasil atau keluaran dari eksekusi file laporan tersebut biasanya juga disimpan di dalam file (soft copy) kemudian dapat dicetak di atas ertas (hard copy). Perintah SPOOL, yang dijelaskan pada Bab 2, dapat digunakan untuk mencetak eluaran ke atas kertas.

Untuk mengingatkan kembali, perintah untuk memulai dan mengakhiri SPOOL ditampilkan berikut ini.
SPOOL file_name[.ext]
SPOOL [OFF|OUT]



Pilihan OFF maupun OUT sama-sama bertujuan untuk mengakhiri spooling (semua keluaran dituliskan ke dalam file spool). Khusus untuk OUT, setelah penulisan ke file dilakukan, file tersebut dikirim ke default printer untuk dicetak sebagai hard copy. Hanya saja pada system operasi Windows, perintah SPOOL OUT tidak mendukung fungsi pencetakan tersebut. Pilihan OUT mempunyai efek yang sama dengan OFF.
Berikut ini diberikan sebuah script laporan dengan melibatkan perintah SPOOL. Keluaran dari script tersebut disimpan di dalam file yang namanya dapat ditentukan oleh user. Keluaran tidak ditampilkan pada layer SQL*Plus (SET TERMOUT OFF).

--rpt_bayar_mahasiswa.sql

-- Mengatur beberapa nilai system variable
SET PAGESIZE 35
SET LINESIZE 60
SET HEADSEP ON
SET RECSEP OFF
SET FEEDBACK OFF
-- Menghapus BREAKS, COMPUTES, dan COLUMNS
CLEAR BREAKS
CLEAR COMPUTES
CLEAR COLUMNS

-- Melakukan perhitungan jumlah pembayaran mahasiswa.
BREAK ON prodi skip 2
COMPUTE avg max min of bayar on prodi

--Mengatur format kolom
COLUMN today NOPRINT NEW_VALUE v_today
COLUMN nim FORMAT A10 WORD_WRAPPED
COLUMN nama FORMAT A20 WORD_WRAPPED
COLUMN prodi FORMAT A10 WORD_WRAPPED HEADING "PRODI|JUR"
COLUMN bayar FORMAT 99G999G999D99

--Mengakifkan RepHeader dan RepFooter
REPHEADER "--START OF REPORT--"
REPFOOTER "--END OF REPORT--"

--Memberi Judul
TTITLE CENTER "DAFTAR MAHASISWA" SKIP CENTER"===============================================" SKIP 2  LEFT "User          : " SQL.USER SKIP RIGHT "Halaman :" FORMAT 99 SQL.PNO SKIP LEFT  "Tanggal       :" FORMAT A20 v_today SKIP LEFT  "=============================================================" BTITLE LEFT "----------------------------------------------------------------------------------------------"SKIP 2

--Mengaktifkan SPOOL. Nama file dapat diinput oleh user
SET DEFINE ON
ACCEPT file_name PROMPT "File penampung hasil report: "
SPOOL &file_name

--Menonaktifkan  pencetakan keluaran ke SQL* PLUS
SET TERMOUT OFF

-- Query untuk menampilkan data-data mahasiswa

select TO_CHAR(SYSDATE,'DD-MON-YYYY')today, nim, nama, prodi, bayar from mahasiswa ORDER BY 1,2;

--Menghentikan Spool
SPOOL OFF

--Mengembalikan beberapa nilai system variable ke default
SET FEEDBACK ON
SET RECSEP WRAPPED
SET TERMOUT ON



Apabila script diatas dijalankan, yang ditampilkan hanya teks untuk meminta user memasukkan nama file (dan direktori) tempat penampungan hasil laporan seperti yang ditunjukkan berikut ini.

SQL> @ C:\rpt_bayar_mahasiswa.sql
File penampung hasil report : C:\BelajarSQL\rpt_hasil.txt

Anda dapat melihat isi file laporan yang baru saja dibuat menggunakan perintah GET atau membukanya dengan sembarang text editor. Apabila Anda meliaht isi file tersebut dengan menggunakan perintah GET, baris-baris kosong tidak akan dimunculkan. Isi file laporan tersebut adalah seperti berikut ini.



                      DAFTAR MAHASISWA                     
       ===============================================     
                                                           
User          : DEDY                                       
                                              Halaman :  1
Tanggal       :09-AGT-2008                                  
----------------------------------------------------------
                                                           
--START OF REPORT--                                        
                                PRODI                       
NIM        NAMA                 JUR                 BAYAR  
---------- -------------------- ---------- --------------  
30107001   ANGGI NOVEMBRA       MI           2.000.000,00  
30107003   WIDO KESUMA                       2.000.000,00  
30107004   MURDIJAT ARIF                    15.000.000,00  
           PRABOWO                                         
                                ********** --------------  
                                avg          6.333.333,33  
                                minimum      2.000.000,00  
                                maximum     15.000.000,00  
                                                           
                                                           
30207005   ANUGRAH DWI ARDIANTO TK           8.000.000,00  
30207006   ANDRE ADRIAN                      2.000.000,00  
30207007   ANDI HAKIM ARIF                   4.000.000,00  
                                ********** --------------  
                                avg          4.666.666,67  
                                minimum      2.000.000,00  
                                maximum      8.000.000,00  
                                                           
                                                            
30307008   SWANDY EFRAIM MANALU KA          10.000.000,00  
30307009   SITI NURFAUZIYAH                  3.500.000,00  
-                                                          

                      DAFTAR MAHASISWA                      
       ===============================================     
                                                           
User          : DEDY                                       
                                              Halaman :  2
Tanggal       :09-AGT-2008                                 
----------------------------------------------------------
                                                           
                                PRODI                      
NIM        NAMA                 JUR                 BAYAR  
---------- -------------------- ---------- --------------  
                                ********** --------------  
                                avg          6.750.000,00  
                                minimum      3.500.000,00  
                                maximum     10.000.000,00  
                                                                                                                     
--END OF REPORT--                                           

Menciptakan output HTML dengan SQL * Plus
Sejak versi 8.1.6 oracle memungkinkan kita untuk menciptakan HTML dengan SQL * Plus. Sangatlah mudah untuk mengubah script dari mode karakter ke html, karena seluruh tag SQL * Plus dapat dikonversi ke tag HTML tanpa mengubah kode.



--rpt_bayar_mahasiswa_html.sql
--menjalankan output dalam html dan melakukan spool terhadap output
Set markup html on spool on
--menentukan file dengan ekstension htm atau html
Spool file_name.html
--Query
Select * from table_name;
--mengakhiri file html
Spool off
--mengatur kembali ke output normal
Set markup html off spool off

Kemudian perintah diatas dieksekusi sbb:
SQL> @ C:\rpt_bayar_mahasiswa_html.sql
File penampung hasil report : C:\BelajarSQL\rpt_hasil.html

Berikut ini contohnya jika report yang telah dibuat sebelumnya dijadikan file HTML:
--Menjalankan output dalam html
SET MARKUP HTML ON SPOOL ON

-- Mengatur beberapa nilai system variable
SET PAGESIZE 35
SET LINESIZE 60
SET HEADSEP ON
SET RECSEP OFF
SET FEEDBACK OFF

-- Menghapus BREAKS, COMPUTES, dan COLUMNS
CLEAR BREAKS
CLEAR COMPUTES
CLEAR COLUMNS

-- Melakukan perhitungan jumlah penerimaan pegawai per-tahun.
BREAK ON prodi skip 2
COMPUTE avg max min of bayar on prodi

--Mengatur format kolom
COLUMN today NOPRINT NEW_VALUE v_today
COLUMN nim FORMAT A10 WORD_WRAPPED
COLUMN nama FORMAT A20 WORD_WRAPPED
COLUMN prodi FORMAT A10 WORD_WRAPPED HEADING "PRODI|JUR"
COLUMN bayar FORMAT 99G999G999D99

--Menonakifkan RepHeader dan RepFooter
REPHEADER "--START OF REPORT--"
REPFOOTER "--END OF REPORT--"

--Memberi Judul
TTITLE CENTER "DAFTAR MAHASISWA" SKIP CENTER"===============================================" SKIP 2  LEFT "User          : " SQL.USER SKIP RIGHT "Halaman :" FORMAT 99 SQL.PNO SKIP LEFT  "Tanggal       :" FORMAT A20 v_today SKIP LEFT  "=============================================================" BTITLE LEFT "----------------------------------------------------------------------------------------------"SKIP 2

--Mengaktifkan SPOOL. Nama file dapat diinput oleh user
SET DEFINE ON
ACCEPT file_name PROMPT "File penampung hasil report: "
SPOOL &file_name
--Menonaktifkan  pencetakan keluaran ke SQL* PLUS
SET TERMOUT OFF

-- Query untuk menampilkan data-data pegawai

select TO_CHAR(SYSDATE,'DD-MON-YYYY')today, nim, nama, prodi, bayar from mahasiswa ORDER BY 1,2;

--Menghentikan Spool
SPOOL OFF

--Mengembalikan beberapa nilai system variable ke default
SET FEEDBACK ON
SET RECSEP WRAPPED
SET TERMOUT ON
SET MARKUP HTML OFF SPOOL OFF;

                                        



Hasil dari eksekusi script diatas adalah sbb:


DAFTAR MAHASISWA


===================================

User :
 DEDY



Halaman : 1
Tanggal :
 09-AGT-2008






NIM
NAMA
PRODI
JUR
BAYAR
30107001
ANGGI NOVEMBRA
MI
2.000.000,00
30107003
WIDO KESUMA
 
2.000.000,00
30107004
MURDIJAT ARIF PRABOWO
 
15.000.000,00
 
 
**********
-------------
 
 
avg
6.333.333,33
 
 
minimum
2.000.000,00
 
 
maximum
15.000.000,00
30207005
ANUGRAH DWI ARDIANTO
TK
8.000.000,00
30207006
ANDRE ADRIAN
 
2.000.000,00
30207007
ANDI HAKIM ARIF
 
4.000.000,00
 
 
**********
-------------
 
 
avg
4.666.666,67
 
 
minimum
2.000.000,00
 
 
maximum
8.000.000,00
30307008
SWANDY EFRAIM MANALU
KA
10.000.000,00
30307009
SITI NURFAUZIYAH
 
3.500.000,00
 
 
**********
-------------
 
 
avg
6.750.000,00
 
 
minimum
3.500.000,00
 
 
maximum
10.000.000,00

Tidak ada komentar:

Posting Komentar