4.2.1 Implementasi Stored Procedure untuk Insert dan Update Data Pemesanan Suku Cadang
Berikut ini adalah listing stored procedure insert dan update data suku cadang yang digunakan oleh administrator ketika mengambil suku cadang untuk proses servis dalam masalah ini 1 administrator hanya melayani 1 konsumen, stored procedure akan berjalan ketika ada 2 administrator dengan 2 konsumen berbeda sedang mengambil barang untuk proses servis untuk menghindari adanya kesalahan dalam pencatatan jumlah stok suku cadang yang ada dalam database. Stored Prodecure ini digunakan untuk memasukkan data pemesanan suku cadang yang digunakan oleh konsumen kedalam database dan juga bisa mengupdate jumlah suku cadang dengan id yang sama dalam satu nota servis. Stored procedure ini berguna dalam menangani masalah concurrency control dengan menerapkan protokol 2PL ( Two phase locking ) dengam menambahkan query FOR UPDATE. Locking akan berjalan ketika stored procedure Tambahsukucadang dipanggil, locking berguna untuk mengunci jumlah stok dari suku cadang dengan id tertentu, agar tidak terjadi lost update problem pada suku cadang tertentu ketika data suku cadang yang sama digunakan secara bersamaan oleh dua administrator yang berbeda. Status digunakan untuk melaporkan hasil prosedur apakah transaksi berhasil dijalankan atau tidak, setelah mengunci stok suku cadang maka stored procedure akan menerima masukan v_pemesanan untuk menentukan apakah akan menambahkan barang baru kedalam pemesanan atau akan menambahkan jumlah pemesanan saja, ketika menerima masukan v_pemesanan = 1 maka stored procedure akan melanjutkan mengecek jumlah pesanan suku cadang dan stok suku cadang yang ada apakah jumlah suku cadang yang diambil tidak melebihi stok suku cadang yang ada jika melebihi maka stored procedure akan membatalkan transaksi dan akan memberikan pesan kesalahan status : 0 , ketika jumlah yang diambil tidak melebihi stok yang ada maka akan melakukan penyimpanan ke tabel pemesanan dan memberikan pesan sukses status : 1. Sedangkan ketika stored procedure menerima masukan v_pemesanan selain 1 maka akan dibaca untuk mengupdate jumlah suku cadang yang dipesan selanjutnya mengecek jumlah pesanan suku cadang dan stok suku cadang yang ada apakah jumlah suku cadang yang diambil tidak melebihi stok suku cadang yang ada jika melebihi maka stored procedure akan membatalkan transaksi dan akan memberikan pesan kesalahan status : 0 , ketika jumlah yang diambil tidak melebihi stok
yang ada maka akan melakukan penyimpanan ke tabel pemesanan dan memberikan pesan sukses status : 1 yang akan ditampilkan dalam listing 4.1.
create or replace
select stock into v_stock from sukucadang where idsukucadang = v_idsukucad for update;
dbms_lock.sleep(5);
insert into pemesanan (nonota, idsukucadang, jumlah, totalharga) values (v_idnota,v_idsuku,v_jumlah,v_harga);
update sukucadang set stock = v_stock - v_jumlah
select jumlah into v_tambah from pemesanan where idsukucadang = v_idsuku and nonota = v_idnota;
update pemesanan set jumlah = v_tambah + v_jumlah where idsukucadang = v_idsuku and nonota = v_idnota;
update sukucadang set stock = v_stock - v_jumlah where idsukucadang = v_idsukucad;
Listing 4. 1 Stored Procedure Tambah Suku Cadang
4.2.2 Implemetasi Stored Procedure untuk Menghapus Data Pesanan Suku Cadang Berikut ini adalah listing stored procedure yang digunakan untuk menghapus data pesanan jika konsumen tidak jadi menggunakan suku cadang tertentu untuk proses service pertama stored procedure akan mengunci stok dari tabel pemesanan dengan perintah FOR UPDATE, lalu akan mengembalikan jumlah suku cadang yang diambil kedalam tabel suku cadang, kemudian akan menghapus data pesanan suku cadang dari tabel pemesanan yang akan ditampilkan dalam listing 4.2.
Listing 4. 2 Stored Procedure Hapus Sk Pesan create or replace
procedure hapusskpesanan
(idnota in pemesanan.nonota%type, idsuku in pemesanan.idsukucadang%type) is
stock sukucadang.stock%type;
jumlahdiambil pemesanan.jumlah%type;
begin
select stock into stock from pemesanan where idsukucadang = idsuku and nonota = idnota for update;
dbms_lock.sleep(5);
select jumlah into jumlahdiambil from pemesanan where idsukucadang = idsuku and nonota = idnota;
update sukucadang set stock = stock + jumlahdiambil where idsukucadang = idsuku;
delete from pemesanan where idsukucadang = idsuku and nonota = idnota;
commit;
end hapusskpesanan;
4.2.3 Implementasi Stored Procedure untuk Mengupdate Data Suku Cadang kedalam Database
Berikut ini adalah listing stored procedure yang digunakan untuk mengupdate data suku cadang kedalam database , pertama stored procedure akan mengunci stock dari tabel suku cadang sesuai dengan id suku cadang yang dipilih setelah itu akan melakukan perintah update suku cadang set nama suku cadang, stock, limit, idjenis, id jenis motor, harga, sesuai dengan masukan yang didapat dan berdasarkan id suku cadang yang dipilih. Yang akan ditampilkan dalam listing 4.3.
Listing 4. 3 Stored Procedure Tambah Sk create or replace
procedure tambahsk
(v_idsuku in sukucadang.idsukucadang%type, v_namasuku in sukucadang.namasukucadang%type, v_limit in sukucadang.limit%type,
v_idjenis in sukucadang.idjenis%type, v_harga in sukucadang.harga%type, v_stocktambah number)
is
v_stock sukucadang.stock%type;
begin
select stock into v_stock from sukucadang where idsukucadang = v_idsuku for update;
dbms_lock.sleep(5);
update sukucadang set namasukucadang = v_namasuku, stock = v_stock + v_stocktambah, limit = v_limit, idjenis = (select idjenis from jenissukucadang where jenissukucadang = v_idjenis), harga = v_harga
where idsukucadang = v_idsuku;
commit;
end tambahsk;
4.2.4 Implementasi Stored Procedure Mendapatkan Nonota untuk Pendaftaran Servis
Berikut ini adalah listing stored procedure untuk mendapatkan no nota yang akan digunakan dalam proses pemesanan servis dan akan menambahkan no nota yang didapat kedalam database. Pertama stored procedure akan mengunci nomor nota dari tabel servis dan akan disimpan sebagai s_maxnota , setelah mendapaatkan s_maxnota maka akan mencari nomor nota baru dengan perintah s_idnota = s_maxnota + 1, dan selanjutnya akan membaca panjang dari maxnota yang dihasilkan ketika panjang dari s_idnota baru adalah 1 maka secara otomatis akan menambahkan "000" didepan s_idnota baru jika panjang s_idnota adalah 2 maka akan menambahkan "00" di depan s_idnota dan jika panjang s_idnota adalah 3 maka akan menambahkan "0" didepan s_idnota dan ketika s_idnota memiliki panjang lebih dari 3 maka tidak menambahkan 0 didepan s_idnota. Setelah mendapatkan s_notaakhir maka stored procedure akan menambahkan notaakhir dalam database berikut dengan id kendaraan yang akan diservis dan tanggal servis yang didapat. ketika transaksi berhasil maka stored procedure akan memberikan pesan sukses yaitu v_status = 1 dan ketika transaksi gagal maka stored procedure akan melakukan roolback dan akan memberikan pesan gagal yaitu v_status = 0. yang akan ditampilkan dalam listing 4.4
create or replace
select max(nonota) into s_ceknota from service;
select nonota into s_maxnota from service where nonota = s_ceknota for update of nonota;
dbms_lock.sleep(5);
s_idnota := s_maxnota + 1;
if(length(s_idnota) = 1) then s_notaakhir := '000'||s_idnota;
Listing 4. 4 Stored Procedure Servis