22
LAPORAN PROYEK PEMBANGUNAN BASIS DATA TELKOM APPLIED SCIENCE SCHOOL | 2014 MANAJEME N INFORMAT IKA PERSEWAAN MOBIL FAKHRI RENTAL CAR Penulis Atyantiraras Retno Widayu

Pemrograman Basis Data untuk studi kasus Persewaan Mobil

Embed Size (px)

DESCRIPTION

berisi tentang program basis data untuk membuat laporan sesuai bulan dan juga mengcreate table untuk masing-masing mobil yg berisi jumlah pemakaian per mobil untuk setiap bulannya

Citation preview

Page 1: Pemrograman Basis Data untuk studi kasus Persewaan Mobil

1. Proses Bisnis

MANAJEMEN INFORMATIKA PERSEWAAN MOBIL FAKHRI RENTAL CAR

PenulisAtyantiraras Retno Widayu6301114172

Page 2: Pemrograman Basis Data untuk studi kasus Persewaan Mobil

Fakhri Rental Car adalah sebuah usaha yang bergerak di bidang persewaan mobil

dengan jam kerja dari pukul 08.30 WIB - 21.00 WIB. Proses bisnis yang berjalan di

Fakhri Rental Car sedikit berbeda dengan persewaan mobil lainnya. Jika persewaan

mobil lainnya banyak menawarkan paket dalam bentuk jam, Fakhri Rental Car hadir

dengan cara yang baru yaitu dengan harga pinjam yang lebih murah namun

perhitungan lama pinjam berdasarkan hari saja.

Petugas administrasi melakukan pengelolaan terhadap data pelanggan, data jenis

mobil, data mobil, transaksi peminjaman ataupun transaksi pengembalian.

Bagi calon peminjam yang sebelumnya belum pernah melakukan peminjaman

mobil di Fakhri Rental Car diwajibkan membawa fotocopy KTP sebagai arsip untuk

perusahaan. Selanjutnya petugas akan melakukan pencatatan data peminjam ke dalam

database untuk selanjutnya dapat melakukan transaksi peminjaman. Sedangkan untuk

peminjam lama, dapat langsung melakukan peminjaman.

Untuk setiap peminjaman, dapat terdiri dari beberapa mobil dan peminjam dapat

mengembalikan mobil secara tidak bersamaan pada saat pengembalian. Misalnya pada

saat peminjaman, mobil yang dipinjam adalah Jazz dan Avanza. Kemudian peminjam

mengembalikan mobil Jazz tepat pada tanggal wajib kembali yang telah disepakati,

sedangkan mobil Avanza terlambat dikembalikan, maka mobil Avanza yang terlambat

dikembalikan akan dikenai denda.

Berikut adalah beberapa ketentuan yang dimiliki Fakhri Rental Car untuk proses

peminjaman (asumsi peminjam sudah melakukan pendaftaran) :

a. Fakhri Rental Car hanya melayani peminjaman pada jam kerja.

b. Fakhri Rental Car tidak melayani peminjaman mobil dengan menggunakan sopir.

c. Peminjam diwajibkan memberikan uang muka untuk setiap mobil yang akan

dipinjam. Besarnya tidak kurang dari 30% total biaya yang dihitung dari lama

pinjam dikalikan dengan harga pinjam mobil. Jika ingin melunasi total biaya justru

lebih bagus.

Page 3: Pemrograman Basis Data untuk studi kasus Persewaan Mobil

d. Hari peminjaman dikenakan biaya. Misalnya, jika seorang peminjam ingin

meminjam mobil Avanza dengan harga pinjam Rp 200,000.- /hari pada tanggal 1

Januari 2014 – 3 Januari 2013 (3 hari). Maka peminjam tersebut akan dikenakan

biaya sebesar Rp 600,000.-

e. Perhitungan denda akan ditentukan pada saat pengembalian mobil.

Berikut adalah beberapa ketentuan yang dimiliki Fakhri Rental Car untuk proses

pengembalian:

a. Peminjam mengembalikan mobil yang telah dipinjam sesuai tanggal wajib

pengembalian yang telah disepakati.

b. Peminjam melunasi sisa pembayaran untuk setiap mobil yang telah dipinjam.

c. Denda berlaku untuk setiap mobil yang terlambat dikembalikan.

d. Keterlambatan dihitung dari tanggal pengembalian dikurangi dengan tanggal

wajib pengembalian.

e. Denda yang diberlakukan di Fakhri Rental Car adalah harga pinjam mobil yang

dipinjam dikalikan dengan jumlah keterlambatan pengembalian (satuan hari).

f. Batas maksimal pengembalian mobil adalah jam 9 malam, lewat jam tersebut

pengembalian tidak akan dilayani dan peminjam harus mengembalikan mobil

keesokan harinya pada jam kerja.

2. Batasan Masalah

Dalam pembuatan aplikasi ini penulis memerlukan beberapa batasan masalah yaitu :

1. Aplikasi ini dapat diakses oleh petugas administrasi dan manager.

2. Aplikasi ini digunakan untuk mengelola transaksi yang terjadi di Fakhri Rental Car

dalam sehari-hari, yaitu meliputi pengelolaan data jenis mobil, data mobil,

pendaftaran peminjam baru, transaksi peminjaman dan transaksi pengembalian.

3. Aplikasi ini dibuat menggunakan APEX.

4. Petugas administrasi dapat mengakses seluruh halaman yang ada di aplikasi ini,

sedangkan untuk manager hanya dapat mengakses halaman yang berupa report

dan grafik.

3. Flowmap

Page 4: Pemrograman Basis Data untuk studi kasus Persewaan Mobil

Dalam studi kasus ini terdapat dua flowmap, yaitu :

a. Flowmap Peminjaman

b. Flowmap Pengembalian

Page 5: Pemrograman Basis Data untuk studi kasus Persewaan Mobil

4. ER-Diagram

Berikut adalah ER-Diagram yang digunakan dalam pembangunan aplikasi ini :

Page 6: Pemrograman Basis Data untuk studi kasus Persewaan Mobil

Gambar 1

Sesuai dengan ER-Diagram pada Gambar 1, terdapat entitas ‘Pegawai’ yang

tidak memiliki relasi ke entitas lainnya. Hal ini dikarenakan entitas ‘Pegawai’ hanya

berfungsi untuk menampung id dan nama pegawai yang digunakan sebagai

username dan password untuk login ke aplikasi yang terdapat di APEX (berfungsi

untuk keamanan).

5. Diagram Relasional

Berikut adalah diagram relasional sesuai dengan ER-Diagram pada Gambar 1 :

Page 7: Pemrograman Basis Data untuk studi kasus Persewaan Mobil

Gambar 2

6. Struktur Table

a. Tabel PEMINJAM

Page 8: Pemrograman Basis Data untuk studi kasus Persewaan Mobil

No Nama Kolom Tipe Data Keterangan

1 NO_KTP CHAR(16) PRIMARY KEY2 NAMA VARCHAR2(30)3 JK VARCHAR2(15)4 TGL_DAFTAR DATE5 ALAMAT VARCHAR2(50)6. KOTA VARCHAR2(25)

b. Tabel NO_TELP

No Nama Kolom Tipe Data Keterangan

1 NO_KTP CHAR(16)

FOREIGN KEY REFERENCE TABEL PEMINJAM,PRIMARY KEY 1

2 NO_TELP CHAR(13) PRIMARY KEY 2

c. Tabel JENIS_MOBIL

No Nama Kolom Tipe Data Keterangan

1 KODE_JENIS CHAR(2) PRIMARY KEY2 KETERANGAN VARCHAR2(20)3 TAHUN CHAR(4)4 HARGA_PINJAM NUMBER

d. Tabel MOBIL

No Nama Kolom Tipe Data Keterangan

1 NO_POL VARCHAR2(10) PRIMARY KEY2 NAMA VARCHAR2(30)3 MERK VARCHAR2(30)

4 KODE_JENIS CHAR(2)FOREIGN KEY REFERENCE TABEL JENIS_MOBIL

5 STATUS VARCHAR2(30)

e. Tabel PEMINJAMAN

Page 9: Pemrograman Basis Data untuk studi kasus Persewaan Mobil

No Nama Kolom Tipe Data Keterangan

1 ID_PINJAM CHAR(5) PRIMARY KEY2 TGL_PINJAM DATE

3 NO_KTP CHAR(16)FOREIGN KEY REFERENCE TABEL PEMINJAM

f. Tabel DETAIL_PINJAMAN

No Nama Kolom Tipe Data Keterangan

1 ID_PINJAM CHAR(5)

FOREIGN KEY REFERENCE TABEL PEMINJAMAN,PRIMARY KEY 1

2 NO_POL VARCHAR2(10)

FOREIGN KEY REFERENCE TABEL MOBIL,PRIMARY KEY 2

3 TGL_WAJIB_KEMBALI DATE4 LAMA_PINJAM NUMBER (3)5 BAYAR NUMBER

g. Tabel PENGEMBALIAN

No Nama Kolom Tipe Data Keterangan

1 ID_PENGEMBALIAN CHAR(5) PRIMARY KEY2 TGL_KEMBALI DATE

Page 10: Pemrograman Basis Data untuk studi kasus Persewaan Mobil

h. Tabel DETAIL_PENGEMBALIAN

No Nama Kolom Tipe Data Keterangan

1 ID_PENGEMBALIAN CHAR(5)

FOREIGN KEY REFERENCE TABEL PENGEMBALIAN,PRIMARY KEY 1

2 ID_PINJAM CHAR(5)

FOREIGN KEY REFERENCE TABEL DETAIL_PINJAMAN,PRIMARY KEY 2

3 NO_POL VARCHAR2(10)

FOREIGN KEY REFERENCE TABEL DETAIL_PINJAMAN,PRIMARY KEY 3

4 DENDA NUMBER5 SISA_PEMBAYARAN NUMBER

7. Pembahasan

Materi Pemrograman Basis Data yang saya implementasikan dalam aplikasi ini adalah

mengenai UTL_FILE , NATIVE DYNAMIC SQL dan DBMS_SCHEDULER.

a. UTL_FILE digunakan untuk membuat laporan dalam bentuk file EXCEL, dimana

laporan tersebut mencetak jumlah pemakaian dari masing-masing mobil untuk

setiap bulannya, serta total uang dan denda yang dihasilkan dari mobil yang

bersangkutan. Disertai dengan keterangan mobil yang paling diminati peminjam,

dan yang paling jarang dipinjam serta total pendapatan tertinggi dan terendah.

Data ini hanya diperuntukkan untuk mobil-mobil yang dikembalikan pada bulan

yang diinginkan.

b. NATIVE DYNAMIC SQL digunakan untuk membuat table untuk masing-masing mobil

(diwakili dengan nomor polisi). Table tersebut berisi jumlah pemakaian mobil yang

bersangkutan untuk setiap bulannya. Jika belum dikembalikan, jumlah

pemakaiannya akan tetap dihitung, karena perhitungan jumlah pemakaian

didasarkan pada saat mobil dipinjam. Jadi jika mobil belum dikembalikan, tetap

akan dihitung.

c. DBMS_SCHEDULER digunakan untuk menjalankan procedure untuk membuat table

setiap akhir bulan pada saat persewaan mobil sudah tutup.

Page 11: Pemrograman Basis Data untuk studi kasus Persewaan Mobil

Adapun coding program UTL_FILE adalah sebagai berikut :

create or replace PROCEDURE laporan_pemakaian_mobil(vbulan in varchar2,vtahun varchar2) is femp UTL_FILE.FILE_TYPE; vline varchar2(200); vno number:=0; vjum number:=0; vsewa number:=0; vdenda number:=0; vtotal number:=0; vtotaldenda number:=0; bulan varchar2(20); vnopol varchar2(10); vnama varchar2(30);

cursor rekap_bulanan is select m.no_pol, m.merk, m.nama, count(dpg.no_pol) as jumlah, sum(dpj.lama_pinjam) as lama, sum((dpj.lama_pinjam*jm.harga_pinjam)) as total_harga, sum(dpg.denda) as denda from peminjam p join peminjaman pj on (pj.no_ktp=p.no_ktp) join detail_pinjaman dpj on(pj.id_pinjam=dpj.id_pinjam) join mobil m on (dpj.no_pol=m.no_pol) join jenis_mobil jm on (jm.kode_jenis=m.kode_jenis) join detail_pengembalian dpg on(dpg.id_pinjam=dpj.id_pinjam) and (dpg.no_pol=dpj.no_pol) join pengembalian pg on (dpg.id_pengembalian=pg.id_pengembalian) where to_char(pg.tgl_kembali,'MM') = vbulan and to_char(pg.tgl_kembali,'YYYY') = vtahun group by m.no_pol, m.merk, m.nama order by m.nama, m.merk, m.no_pol; cursor mobil_maksimal is select m.no_pol, m.nama from mobil m join (select m.no_pol, m.nama, count(dpg.no_pol) as jumlah from peminjam p join peminjaman pj on (pj.no_ktp=p.no_ktp) join detail_pinjaman dpj on(pj.id_pinjam=dpj.id_pinjam) join mobil m on (dpj.no_pol=m.no_pol) join jenis_mobil jm on (jm.kode_jenis=m.kode_jenis) join detail_pengembalian dpg on(dpg.id_pinjam=dpj.id_pinjam) and (dpg.no_pol=dpj.no_pol) join pengembalian pg on (dpg.id_pengembalian=pg.id_pengembalian) where to_char(pg.tgl_kembali,'MM') = vbulan and to_char(pg.tgl_kembali,'YYYY') = vtahun group by m.no_pol, m.nama) a on (m.no_pol = a.no_pol) where jumlah = (select max(jumlah) from (select m.no_pol, m.nama, count(dpg.no_pol) as jumlah from peminjam p join peminjaman pj on (pj.no_ktp=p.no_ktp) join detail_pinjaman dpj on(pj.id_pinjam=dpj.id_pinjam) join mobil m on (dpj.no_pol=m.no_pol) join jenis_mobil jm on (jm.kode_jenis=m.kode_jenis) join detail_pengembalian dpg on(dpg.id_pinjam=dpj.id_pinjam) and (dpg.no_pol=dpj.no_pol) join pengembalian pg on (dpg.id_pengembalian=pg.id_pengembalian) where to_char(pg.tgl_kembali,'MM') = vbulan and to_char(pg.tgl_kembali,'YYYY') = vtahun group by m.no_pol, m.nama)) and rownum=1 order by m.nama asc;

Page 12: Pemrograman Basis Data untuk studi kasus Persewaan Mobil

cursor total_maksimal is select m.no_pol, m.nama, total from mobil m join (select m.no_pol, m.nama, sum((dpj.lama_pinjam*jm.harga_pinjam)+dpg.denda) as total

from peminjam p join peminjaman pj on (pj.no_ktp=p.no_ktp)join detail_pinjaman dpj on(pj.id_pinjam=dpj.id_pinjam)join mobil m on (dpj.no_pol=m.no_pol)join jenis_mobil jm on (jm.kode_jenis=m.kode_jenis)join detail_pengembalian dpgon(dpg.id_pinjam=dpj.id_pinjam) and (dpg.no_pol=dpj.no_pol)join pengembalian pg on (dpg.id_pengembalian=pg.id_pengembalian)where to_char(pg.tgl_kembali,'MM') = vbulan and to_char(pg.tgl_kembali,'YYYY') = vtahun group by m.no_pol, m.nama) a

on (m.no_pol = a.no_pol) where total = (select max(total) from (select m.no_pol, m.nama,

sum((dpj.lama_pinjam*jm.harga_pinjam)+dpg.denda) as totalfrom peminjam p join peminjaman pj on (pj.no_ktp=p.no_ktp)join detail_pinjaman dpj on(pj.id_pinjam=dpj.id_pinjam)join mobil m on (dpj.no_pol=m.no_pol)join jenis_mobil jm on (jm.kode_jenis=m.kode_jenis)join detail_pengembalian dpgon(dpg.id_pinjam=dpj.id_pinjam) and (dpg.no_pol=dpj.no_pol)join pengembalian pg on (dpg.id_pengembalian=pg.id_pengembalian)where to_char(pg.tgl_kembali,'MM') = vbulan and to_char(pg.tgl_kembali,'YYYY') = vtahun group by m.no_pol, m.nama))

and rownum =1 order by m.nama asc;

cursor total_minimal is select m.no_pol, m.nama, total from mobil m join (select m.no_pol, m.nama,

sum((dpj.lama_pinjam*jm.harga_pinjam)+dpg.denda) as totalfrom peminjam p join peminjaman pj on (pj.no_ktp=p.no_ktp)join detail_pinjaman dpj on(pj.id_pinjam=dpj.id_pinjam)join mobil m on (dpj.no_pol=m.no_pol)join jenis_mobil jm on (jm.kode_jenis=m.kode_jenis)join detail_pengembalian dpgon(dpg.id_pinjam=dpj.id_pinjam) and (dpg.no_pol=dpj.no_pol)join pengembalian pg on (dpg.id_pengembalian=pg.id_pengembalian)where to_char(pg.tgl_kembali,'MM') = vbulan and to_char(pg.tgl_kembali,'YYYY') = vtahun group by m.no_pol, m.nama) a

on (m.no_pol = a.no_pol)where total = (select min(total) from

(select m.no_pol, m.nama, sum((dpj.lama_pinjam*jm.harga_pinjam)+dpg.denda) as totalfrom peminjam p join peminjaman pj on (pj.no_ktp=p.no_ktp)join detail_pinjaman dpj on(pj.id_pinjam=dpj.id_pinjam)join mobil m on (dpj.no_pol=m.no_pol)join jenis_mobil jm on (jm.kode_jenis=m.kode_jenis)join detail_pengembalian dpgon(dpg.id_pinjam=dpj.id_pinjam) and (dpg.no_pol=dpj.no_pol)join pengembalian pg on (dpg.id_pengembalian=pg.id_pengembalian)where to_char(pg.tgl_kembali,'MM') = vbulan and to_char(pg.tgl_kembali,'YYYY') = vtahun group by m.no_pol, m.nama))

and rownum =1 order by m.nama asc;

Page 13: Pemrograman Basis Data untuk studi kasus Persewaan Mobil

cursor mobil_minimal is select m.no_pol, m.nama from mobil m join(select m.no_pol, m.nama, count(dpg.no_pol) as jumlah

from peminjam p join peminjaman pj on (pj.no_ktp=p.no_ktp)join detail_pinjaman dpj on(pj.id_pinjam=dpj.id_pinjam)join mobil m on (dpj.no_pol=m.no_pol)join jenis_mobil jm on (jm.kode_jenis=m.kode_jenis)join detail_pengembalian dpgon(dpg.id_pinjam=dpj.id_pinjam) and (dpg.no_pol=dpj.no_pol)join pengembalian pg on (dpg.id_pengembalian=pg.id_pengembalian)where to_char(pg.tgl_kembali,'MM') = vbulan and to_char(pg.tgl_kembali,'YYYY') = vtahun group by m.no_pol, m.nama) a

on (m.no_pol = a.no_pol)where jumlah =(select min(jumlah) from

(select m.no_pol, m.nama, count(dpg.no_pol) as jumlahfrom peminjam p join peminjaman pj on (pj.no_ktp=p.no_ktp)join detail_pinjaman dpj on(pj.id_pinjam=dpj.id_pinjam)join mobil m on (dpj.no_pol=m.no_pol)join jenis_mobil jm on (jm.kode_jenis=m.kode_jenis)join detail_pengembalian dpgon(dpg.id_pinjam=dpj.id_pinjam) and (dpg.no_pol=dpj.no_pol)join pengembalian pg on (dpg.id_pengembalian=pg.id_pengembalian)where to_char(pg.tgl_kembali,'MM') = vbulan and to_char(pg.tgl_kembali,'YYYY') = vtahun group by m.no_pol, m.nama)) and rownum=1 order by m.nama asc;

BEGIN select distinct to_char(tgl_pinjam,'MONTH') into bulan from peminjaman where to_char(tgl_pinjam,'MM') = vbulan;

femp := UTL_FILE.FOPEN('DIR1','Rekap_'||vbulan||'_'||vtahun||'.xls','W'); UTL_FILE.PUT_LINE(femp,chr(9)||chr(9)||'REKAP TRANSAKSI PENYEWAAN MOBIL BULAN'

||bulan||' '||vtahun); UTL_FILE.NEW_LINE(femp); UTL_FILE.NEW_LINE(femp); UTL_FILE.NEW_LINE(femp);

UTL_FILE.PUT_LINE(femp,'NO'||chr(9)||'NOPOL'||chr(9)||'MERK'||chr(9)||'NAMA'||chr(9)|| 'JUMLAH PEMINJAMAN'||chr(9)||'TOTAL PEMAKAIAN (HARI)' ||chr(9)||'TOTAL SEWA'||chr(9)||'TOTAL DENDA'||chr(9)|| 'TOTAL PENDAPATAN');

FOR x IN rekap_bulanan LOOP vno := vno+1; vsewa := vsewa+x.total_harga; vdenda := vdenda+x.denda; vtotal := vtotal + (x.denda+x.total_harga); vline := vno ||chr(9)||x.no_pol||chr(9)||x.merk||chr(9)||x.nama||chr(9)||x.jumlah ||chr(9)||x.lama||chr(9)||'Rp '||to_char(x.total_harga,'999,999,999.00')

||chr(9)||'Rp'||to_char(x.denda,'99,999,999.00')||chr(9)|| 'Rp'||to_char(x.denda+x.total_harga,'99,999,999.00');

UTL_FILE.PUT_LINE(femp, vline); END LOOP;

Page 14: Pemrograman Basis Data untuk studi kasus Persewaan Mobil

UTL_FILE.PUT_LINE(femp,'Total '||chr(9)||chr(9)||chr(9)||chr(9)||chr(9)||chr(9)|| 'Rp'||to_char(vsewa,'999,999,999.00')||chr(9)||

'Rp'||to_char(vdenda,'999,999,999.00')| |chr(9)|| 'Rp'||to_char(vtotal,'999,999,999.00')

); UTL_FILE.PUT_LINE(femp,' '); UTL_FILE.PUT_LINE(femp,' '); UTL_FILE.PUT_LINE(femp,' ');

FOR r IN mobil_maksimal LOOP UTL_FILE.PUT_LINE(femp,'Mobil yang Paling Diminati'

||chr(9)||chr(9)||chr(9)||r.no_pol||' '||r.nama); END LOOP; FOR a in mobil_minimal LOOP UTL_FILE.PUT_LINE(femp,'Mobil yang Paling Tidak Diminati'

||chr(9)||chr(9)||chr(9)||a.no_pol||' '||a.nama); END LOOP; FOR s in total_maksimal LOOP UTL_FILE.PUT_LINE(femp,'Total Pendapatan Tertinggi'||chr(9)||chr(9)||chr(9)||

'Rp'||to_char(s.total,'999,999,999.00')); END LOOP; FOR d in total_minimal LOOP

UTL_FILE.PUT_LINE(femp,'Total Pendapatan Terendah'||chr(9)||chr(9)||chr(9)|| 'Rp'||to_char(d.total,'999,999,999.00')); END LOOP; UTL_FILE.FCLOSE(femp);END;/

exec laporan_pemakaian_mobil('12','2013');

Page 15: Pemrograman Basis Data untuk studi kasus Persewaan Mobil

Adapun coding program procedure NATIVE DYNAMIC SQL dan DBMS_SCHEDULER

adalah sebagai berikut :

Procedure yang pertama digunakan untuk mengcreate table-table untuk pertama

kalinya.

create or replace procedure proc_mobil is TYPE carCurRef IS REF CURSOR; b carCurRef; vbulan varchar2(20); vbulan1 varchar2(20); jumlah number(4); vtahun varchar2(5); table_name varchar2(35); cmd varchar2(200); q varchar2(600); begin FOR x in (select no_pol from mobil) LOOP table_name := 'Rekap_Mobil_'||x.no_pol; cmd := 'CREATE TABLE '||table_name||'(Bulan varchar2(20), Tahun varchar2(5),

JumlahPeminjaman char(20) )';

EXECUTE IMMEDIATE cmd; q := 'select TO_CHAR(pj.tgl_pinjam,''Month'') as bulan, TO_CHAR(pj.tgl_pinjam,''MM'') as bulan1, TO_CHAR(pj.tgl_pinjam,''YYYY'') as tahun, COUNT(dpj.id_pinjam) as jumlah from peminjaman pj join detail_pinjaman dpj '|| 'on(dpj.id_pinjam=pj.id_pinjam) '|| 'where no_pol = :a '||' group by TO_CHAR(pj.tgl_pinjam,''Month''), TO_CHAR(pj.tgl_pinjam,''MM''), TO_CHAR(pj.tgl_pinjam,''YYYY'')'||

'order by tahun, bulan1 asc'; OPEN b for q using x.no_pol; LOOP FETCH b INTO vbulan, vbulan1, vtahun, jumlah; EXIT WHEN b%NOTFOUND; EXECUTE IMMEDIATE 'insert into '||table_name||' values (:q,:w,:k)'

using vbulan, vtahun, jumlah; commit;

END LOOP; CLOSE b; END LOOP;END;/exec proc_mobil;

Page 16: Pemrograman Basis Data untuk studi kasus Persewaan Mobil

Procedure kedua digunakan untuk mereplace tabel-tabel lama dengan tabel yang

baru, dengan procedure ini table bisa dibuat setiap awal tahun. Kedua procedure

yang ada dibuat dengan nama yang sama.

create or replace procedure proc_mobil is TYPE carCurRef IS REF CURSOR; b carCurRef; vbulan varchar2(20); vbulan1 varchar2(20); jumlah number(4); vtahun varchar2(5); table_name varchar2(35); cmd varchar2(200); q varchar2(600); begin FOR x in (select no_pol from mobil) LOOP table_name := 'Rekap_Mobil_'||x.no_pol; EXECUTE IMMEDIATE 'DROP TABLE Rekap_Mobil_'||x.no_pol;

cmd := 'CREATE TABLE '||table_name||'(Bulan varchar2(20), Tahun varchar2(5),

JumlahPeminjaman char(20) )';

EXECUTE IMMEDIATE cmd; q := 'select TO_CHAR(pj.tgl_pinjam,''Month'') as bulan,

TO_CHAR(pj.tgl_pinjam,''MM'') as bulan1, TO_CHAR(pj.tgl_pinjam,''YYYY'') as tahun,

COUNT(dpj.id_pinjam) as jumlah from peminjaman pj join detail_pinjaman dpj '|| 'on(dpj.id_pinjam=pj.id_pinjam) '|| 'where no_pol = :a '||' group by TO_CHAR(pj.tgl_pinjam,''Month''),

TO_CHAR(pj.tgl_pinjam,''MM''), TO_CHAR(pj.tgl_pinjam,''YYYY'')'||'order by tahun, bulan1 asc';

OPEN b for q using x.no_pol; LOOP FETCH b INTO vbulan, vbulan1, vtahun, jumlah; EXIT WHEN b%NOTFOUND; EXECUTE IMMEDIATE 'insert into '||table_name||' values (:q,:w,:k)'

using vbulan, vtahun, jumlah; commit;

END LOOP; CLOSE b;END LOOP;END;/exec proc_mobil;

Page 17: Pemrograman Basis Data untuk studi kasus Persewaan Mobil

Kemudian procedure yang telah dibuat, dipanggil ke dalam DBMS_SCHEDULER

seperti di bawah ini:

----------------------------------------PROGRAM---------------------------------------------BEGIN DBMS_SCHEDULER.CREATE_PROGRAM ( program_name => 'PROG_MOBIL', program_type => 'STORED_PROCEDURE', program_action => 'proc_mobil', enabled => FALSE, comments => 'Program untuk membuat tabel tentang

jumlah pemakaian mobil');END;/

-----------------------------------------SCHEDULE---------------------------------------------BEGIN DBMS_SCHEDULER.CREATE_SCHEDULE( schedule_name => 'SCHEDULE_MOBIL', start_date => SYSDATE, repeat_interval => 'FREQ=monthly; BYMONTHDAY=-1;' );END;/

--------------------------------------------------JOB---------------------------------------------BEGIN DBMS_SCHEDULER.CREATE_JOB( job_name => 'JOB_MOBIL', program_name => 'PROG_MOBIL', schedule_name => 'SCHEDULE_MOBIL', enabled => TRUE, auto_drop => FALSE, comments => 'Job yang membuat table total jumlah

pemakaian per mobil dalam setiap bulan'

);END;/

EKSEKUSI :EXEC DBMS_SCHEDULER.ENABLE('PROG_MOBIL');EXEC DBMS_SCHEDULER.ENABLE('JOB_MOBIL');

Page 18: Pemrograman Basis Data untuk studi kasus Persewaan Mobil

Hasil :

1. UTL_FILEForm Pencetakan Laporan Pemakaian Mobil :

Hasilnya :

2. NATIVE DYNAMIC SQL dan DMBS_SCHEDULER