1. Proses Bisnis
MANAJEMEN INFORMATIKA PERSEWAAN MOBIL FAKHRI RENTAL CAR
PenulisAtyantiraras Retno Widayu6301114172
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.
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
Dalam studi kasus ini terdapat dua flowmap, yaitu :
a. Flowmap Peminjaman
b. Flowmap Pengembalian
4. ER-Diagram
Berikut adalah ER-Diagram yang digunakan dalam pembangunan aplikasi ini :
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 :
Gambar 2
6. Struktur Table
a. Tabel PEMINJAM
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
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
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.
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;
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;
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;
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');
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;
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;
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');
Hasil :
1. UTL_FILEForm Pencetakan Laporan Pemakaian Mobil :
Hasilnya :
2. NATIVE DYNAMIC SQL dan DMBS_SCHEDULER
Top Related