Selasa, 24 Mei 2011

Solusi Modul 7 TRIGGER

1.    [20 point] Buat trigger untuk ...
a.    Untuk melakukan pengecekan jumlah barang yang didistribusikan pada tabel distribusi serta tampilkan info yang berhubungan. Jika jumlah unit yang dikirim kurang dari 100+(2 digit terakhir Nim) maka tidak boleh dikirim.

JAWAB :
create or replace trigger cek_barang_dist
before insert on distribusi
for each row
declare
namabrng barang.nama_barang%type;
namakurir kurir.nama_kurir%type;
namatoko toko.nama_toko%type;
begin
select nama_barang into namabrng 
from barang 
where id_barang=:new.id_barang;
select nama_kurir into namakurir 
from kurir 
where id_kurir=:new.id_kurir;
select nama_toko into namatoko 
from toko 
where id_toko=:new.id_toko;
if :new.jumlah < 138 then
 dbms_output.put_line('============================================');
 dbms_output.put_line('Barang '||namabrng||' yang didistribusikan oleh '||namakurir||' ke toko '||namatoko);
 dbms_output.put_line('============================================');
 raise_application_error(-20103,'Maaf jumlah barang tidak mencukupi');
else
 dbms_output.put_line('============================================');
 dbms_output.put_line('Barang '||namabrng||' yang didistribusikan oleh '||namakurir||' ke toko '||namatoko);
 dbms_output.put_line('============================================');
 dbms_output.put_line('Barang memenuhi syarat distribusi');
end if;
end;
/
b.    Untuk menampilkan lama bahan datang setelah dilakukan insert pada tabel mengirim, hitung dari waktu tiba dan berikan waktu tiba dan waktu sekarang. Jika waktu tiba kurang dari 10 hari maka barang diperbolehkan untuk dikirim
JAWAB :
create or replace trigger cek_datang
before insert on mengirim
for each row
declare
tiba number;
begin
select round(:new.waktutiba-sysdate) into tiba from dual;
if tiba<10 then
dbms_output.put_line('barang akan tiba '||tiba||' hari lagi.');
else
raise_application_error(-20103,'Kelamaan, masa '||tiba||' hari');
end if;
end;
/
2.    [15 point] Buat trigger untuk ... a.    Menampilkan informasi setelah melakukan insert dari tabel karyawan.
JAWAB :
create or replace trigger info_karyawan
after insert on karyawan
for each row
declare
pngkt jabatan.pangkat%type;
gaji_pokok jabatan.gaji_pokok%type;
begin
select pangkat, gaji_pokok into pngkt, gaji_pokok 
from jabatan 
where id_jabatan=:new.id_jabatan;
dbms_output.put_line('Data Karyawan Baru :');
dbms_output.put_line('===================================');
dbms_output.put_line('Karyawan ID  : '||:new.id_karyawan);
dbms_output.put_line('Nama Karyawan  : '||:new.nama_karyawan);
dbms_output.put_line('Jenis Kelamin  : '||:new.jns_kelamin);
dbms_output.put_line('Alamat   : '||:new.alamat);
dbms_output.put_line('Telp   : '||:new.telp);
dbms_output.put_line('Email  : '||:new.email);
dbms_output.put_line('Pangkat  : '||pngkt);
dbms_output.put_line('Gaji Pokok : '||gaji_pokok);
dbms_output.put_line('===================================');
end;
/
b.    Menampilkan informasi setelah melakukan update pada tabel karyawan.
JAWAB :
create or replace trigger Upd_info_karyawan
after update on karyawan
for each row
declare
pngkt1 jabatan.pangkat%type;
gaji_pokok1 jabatan.gaji_pokok%type;
pngkt2 jabatan.pangkat%type;
gaji_pokok2 jabatan.gaji_pokok%type;
begin
select pangkat, gaji_pokok into pngkt1, gaji_pokok1 
from jabatan 
where id_jabatan=:old.id_jabatan;
select pangkat, gaji_pokok into pngkt2, gaji_pokok2 
from jabatan 
where id_jabatan=:new.id_jabatan;
dbms_output.put_line('Data Karyawan Sebelum diupdate :');
dbms_output.put_line('===================================');
dbms_output.put_line('Karyawan ID  : '||:old.id_karyawan);
dbms_output.put_line('Nama Karyawan  : '||:old.nama_karyawan);
dbms_output.put_line('Jenis Kelamin  : '||:old.jns_kelamin);
dbms_output.put_line('Alamat   : '||:old.alamat);
dbms_output.put_line('Telp   : '||:old.telp);
dbms_output.put_line('Email  : '||:old.email);
dbms_output.put_line('Pangkat  : '||pngkt1);
dbms_output.put_line('Gaji Pokok : '||gaji_pokok1);
dbms_output.put_line('===================================');
dbms_output.put_line('===================================');
dbms_output.put_line('');
dbms_output.put_line('Data Karyawan setelah diupdate :');
dbms_output.put_line('===================================');
dbms_output.put_line('Karyawan ID  : '||:new.id_karyawan);
dbms_output.put_line('Nama Karyawan  : '||:new.nama_karyawan);
dbms_output.put_line('Jenis Kelamin  : '||:new.jns_kelamin);
dbms_output.put_line('Alamat   : '||:new.alamat);
dbms_output.put_line('Telp   : '||:new.telp);
dbms_output.put_line('Email  : '||:new.email);
dbms_output.put_line('Pangkat  : '||pngkt2);
dbms_output.put_line('Gaji Pokok : '||gaji_pokok2);
dbms_output.put_line('===================================');
dbms_output.put_line('===================================');
end;
/
3.    [10 point] Buat trigger untuk melakukan update stok bahan pada tabel bahan jika dilakukan pengiriman bahan oleh supplier.
  JAWAB :
create or replace trigger stok_bahan
after insert on mengirim
for each row
begin
update bahan 
set stock_bahan=stock_bahan+:new.jumlah_unit 
where id_bahan=:new.id_bahan;
end;
/
4.    [10 point] Buat trigger untuk menampilkan pesan setelah melakukan penghapusan data pada tabel mengirim, selain itu juga akan berpengaruh pada stok bahan yang di suplay karena jika dihapus maka pengiriman di batalkan...
  JAWAB :
create or replace trigger info_hapus_kirim
after delete on mengirim
for each row
declare
namabhn bahan.nama_bahan%type;
namasupp supplier.nama_supplier%type;
begin
select nama_bahan into namabhn 
from bahan 
where id_bahan=:old.id_bahan;
select nama_supplier into namasupp 
from supplier 
where id_supplier=:old.id_supplier;
update bahan set stock_bahan=stock_bahan-:old.jumlah_unit where id_bahan=:old.id_bahan;
dbms_output.put_line('Data Mengirim');
dbms_output.put_line('===============================');
dbms_output.put_line('ID Kirim : '||:old.id_kirim);
dbms_output.put_line('Jumlah  : '||:old.jumlah_unit);
dbms_output.put_line('Biaya  : '||:old.biaya);
dbms_output.put_line('Waktu tiba : '||:old.waktutiba);
dbms_output.put_line('Supplier : '||namasupp);
dbms_output.put_line('Bahan  : '||namabhn);
dbms_output.put_line('===============================');
dbms_output.put_line('Berhasil Dihapus');
end;
/

Demikian solusi dari dari modul 7 TRIGGER semoga dapat bermanfaat, dan jika ada kesalahan tolong dikoreksi


Tidak ada komentar:

Posting Komentar

Jangan lupa tinggalkan komentar anda, baik berupa koreksi, kritikan maupun saran...