create table kategori (
kode_kategori varchar2(5),
nama_kategori varchar2(30),
constraint pk_kategori PRIMARY KEY (kode_kategori))
/
create table produk (
kode_produk varchar2(5),
kode_kategori varchar2(5),
harga_satuan number(12),
nama_produk varchar2(50),
stok number(5),
constraint pk_produk PRIMARY KEY (kode_produk),
constraint fk_kode_kategori FOREIGN KEY (kode_kategori) REFERENCES kategori (kode_kategori))
/
create table history(
nama_user varchar(30),
waktu varchar2(25),
keterangan varchar(90));
create table pembeli (
kode_pembeli varchar2(5),
nama_pembeli varchar2(30),
alamat varchar2(45),
kode_pos number(5),
provinsi varchar2(20),
kota varchar2(20),
telepon varchar2(12),
constraint pk_pembeli PRIMARY KEY (kode_pembeli))
/
create table pesanan (
kode_pesanan varchar(5),
kode_pembeli varchar(5),
tanggal_pemesanan date,
constraint pk_pesanan PRIMARY KEY (kode_pesanan),
constraint fk_kode_pembeli FOREIGN KEY (kode_pembeli) references pembeli (kode_pembeli))
/
create table detail_pesanan (
kode_produk varchar2(8),
kode_pesanan varchar2(8),
jumlah_pesanan varchar(15),
constraint pk1_dproduk PRIMARY KEY (kode_produk, kode_pesanan),
constraint fk2_kode_produk FOREIGN KEY (kode_produk) references produk (kode_produk) on delete cascade,
constraint fk3_kode_pesanan FOREIGN KEY (kode_pesanan) references pesanan (kode_pesanan)on delete cascade)
/
TRIGGER
create or replace trigger update_produk_stok
before insert on detail_pesanan
for each row
declare
v_stok number(3);
begin
select stok into v_stok from produk where kode_produk = :new.kode_produk;
if (v_stok - :new.jumlah_pesanan < 0) then
raise_application_error(-20001, 'Jumlah pembelian lebih besar daripada sisa stok');
else
update produk
set stok = stok - :new.jumlah_pesanan
where kode_produk = :new.kode_produk;
end if;
end;
/
FUNCTION
create or replace function hitung_harga_total
(v_harga number, v_jumlah number)
return number
is
begin
return v_harga * v_jumlah;
end;
/
-----------------------------------------------------------------------------------------------------
create or replace function hitung_harga_keseluruhan
(v_kode_pesanan varchar2)
return number
is
v_harga_total number(15);
begin
select sum( b.harga_satuan * dp.jumlah_pesanan )
into v_harga_total
from produk b, detail_pesanan dp
where b.kode_produk = dp.kode_produk
and dp.kode_pesanan = v_kode_pesanan;
return v_harga_total;
end;
/
PROCEDURE
create or replace procedure detail_pembeli
(v_kode_pembeli varchar2)
is
cursor cursor_pembeli is
select * from pembeli
where kode_pembeli = v_kode_pembeli;
cursor cursor_daftar is
select tanggal_pemesanan, kode_pesanan
from pesanan
where kode_pembeli = v_kode_pembeli;
v_kode_pesanan pesanan.kode_pesanan%type;
v_harga_pembelian number(15);
begin
dbms_output.put_line('-----------------------------------------------------');
dbms_output.put_line('Detail Pembeli');
dbms_output.put_line('-----------------------------------------------------');
for pembeli in cursor_pembeli
loop
dbms_output.put_line(rpad('Kode Pembeli', 15) || ' : ' || pembeli.kode_pembeli );
dbms_output.put_line(rpad('Nama', 15) || ' : ' || pembeli.nama_pembeli );
dbms_output.put_line(rpad('Alamat', 15) || ' : ' || pembeli.alamat );
dbms_output.put_line(rpad('Kota', 15) || ' : ' || pembeli.kota );
dbms_output.put_line(rpad('Provinsi', 15) || ' : ' || pembeli.provinsi );
dbms_output.put_line(rpad('No Telepon', 15) || ' : ' || pembeli.telepon);
end loop;
dbms_output.put_line('-----------------------------------------------------');
dbms_output.put_line('Daftar Pembelian');
dbms_output.put_line('-----------------------------------------------------');
dbms_output.put(rpad('Tanggal', 10));
dbms_output.put(rpad('Kode Pesanan', 10));
dbms_output.put_line(lpad('Harga Total', 15));
dbms_output.put_line('-----------------------------------------------------');
for daftar in cursor_daftar
loop
dbms_output.put(rpad(daftar.tanggal_pemesanan, 10));
v_kode_pesanan := daftar.kode_pesanan;
dbms_output.put(rpad(v_kode_pesanan, 10 ));
v_harga_pembelian := hitung_harga_keseluruhan(v_kode_pesanan);
dbms_output.put_line(lpad(v_harga_pembelian, 15));
end loop;
dbms_output.put_line('-----------------------------------------------------');
end;
/
-----------------------------------------------------------------------------------------------------
create or replace procedure struk_pembelian
(v_kode_pesanan varchar2)
is
v_nama pembeli.nama_pembeli%type;
v_jumlah detail_pesanan.jumlah_pesanan%type;
v_harga produk.harga_satuan%type;
v_harga_total number(12);
v_harga_keseluruhan number( 15 );
cursor cursor_pembelian is
select dp.kode_produk, p.nama_produk, p.harga_satuan, dp.jumlah_pesanan
from produk p, detail_pesanan dp
where p.kode_produk = dp.kode_produk
and kode_pesanan = v_kode_pesanan;
begin
select nama_pembeli
into v_nama
from pembeli b, pesanan p
where b.kode_pembeli = p.kode_pembeli
and p.kode_pesanan = v_kode_pesanan;
dbms_output.put_line('--------------------------------------------------------------------------------');
dbms_output.put_line(rpad('Kode Pesanan ', 15) || ' : ' || v_kode_pesanan );
dbms_output.put_line(rpad('Nama Pembeli ', 15) || ' : ' || v_nama );
dbms_output.put_line('--------------------------------------------------------------------------------');
dbms_output.put(rpad('Kode Produk', 12));
dbms_output.put(rpad('Nama Produk', 30));
dbms_output.put(lpad('Harga Satuan', 12));
dbms_output.put(lpad('Jumlah', 10));
dbms_output.put_line(lpad('Harga Total', 15));
dbms_output.put_line('--------------------------------------------------------------------------------');
for pembelian in cursor_pembelian
loop
dbms_output.put(rpad(pembelian.kode_produk, 12));
dbms_output.put(rpad(pembelian.nama_produk, 30));
v_harga := pembelian.harga_satuan;
dbms_output.put(lpad(v_harga, 12));
v_jumlah := pembelian.jumlah_pesanan;
dbms_output.put(lpad(v_jumlah, 10));
v_harga_total := hitung_harga_total( v_harga, v_jumlah );
dbms_output.put(lpad(v_harga_total, 15));
dbms_output.new_line;
end loop;
dbms_output.put_line('--------------------------------------------------------------------------------');
v_harga_keseluruhan := hitung_harga_keseluruhan(v_kode_pesanan);
dbms_output.put_line('Total : ' || v_harga_keseluruhan);
dbms_output.put_line('--------------------------------------------------------------------------------');
end;
/
MyNiceProfile.com
0 komentar: