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 :
JAWAB :
JAWAB :
JAWAB :
JAWAB :
JAWAB :
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...