June 13, 2026
Prosedur, Fungsi, dan Trigger
DASAR TEORI
Azka
5 min read
DASAR TEORI
Stored Procedure
Stored procedure merupakan sekumpulan statement yang disusun sedemikian rupa untuk menjalankan tugas tertentu dan digunakan untuk mempermudah pengolahan data . Beberapa keuntungan dari penggunaan stored procedure antara lain:
- Sebuah stored procedure dikomplikasi dengan lebih cepat dalam mengeksekusi batch atau perintah.
- Memproses data lewat stored procedire dilakukan pada server sehingga mengurangi intensitas lalu lintas data network.
- Stored procedure menawarkan pemrograman modular karena stored procedure dapat memanggil sejenisnya yang lain.
- Stored procedured bisa menjadi salah satu komponen penting dalam keamanan database.
Pada stored procedure dikenal dua macam tipe, yaitu stored procedure yang sudah ada dan buatan user. Terdapat dua perintah untuk membuat stored procedure, antara lain:
CREATE PROCEDURE [nama_procedure]([parameter][tipe data])
BEGIN
[perintah deklarasi]
[perintah eksekusi]
END;CREATE PROCEDURE [nama_procedure]([parameter][tipe data])
BEGIN
[perintah deklarasi]
[perintah eksekusi]
END;Sementara untuk mememanggil stored procedure bisa menggunakan
CALL [nama_procedure];CALL [nama_procedure];Function
Function merupakan bagian dari program yang terdiri dari sekumpulan perintah dan tersimpan sebagai suatu objek di dalam basis data. Cara untuk membuat function sebagai berikut:
CREATE FUNCTION [nama_fungsi]([parameter][tipe data])
RETURNS [tipe data return]
BEGIN
[perintah deklarasi]
[perintah eksekusi]
RETURNN ...
END;CREATE FUNCTION [nama_fungsi]([parameter][tipe data])
RETURNS [tipe data return]
BEGIN
[perintah deklarasi]
[perintah eksekusi]
RETURNN ...
END;Terdapat beberapa elemen yang bisa digabungkan ke dalam function, antara lain:
- SET
- WHILE
- IF
- DECLARE
- SELECT
- INSERT
- UPDATE
- DELETE
dan cara untuk memanggil fungsi seperti berikut:
SELECT [nama_fungsi]([value]);SELECT [nama_fungsi]([value]);Trigger
Trigger merupakan himpunan kode(prosedural) yang dieksekusi secara otomatis sebagai respon atas suatu kejadian yang berkaitan dengan tabel basis data. Terdapat tiga cara untuk membangkitkan trigger dengan INSERT, UPDATE, dan DELETE. Apabila dilihat dari perilaku eksekusi, trigger dapat menjadi beberapa jeni, tetapi umumnya menggunakan BEFORE dan AFTER. Sintaks untuk pembuatan trigger sebagai berikut:
CREATE
[DEFINER = {user CURRENT_USER}]
TRIGGER trigger_name, trigger_time, trigger event
ON tbl_name FOR EACH ROW trigger_smttCREATE
[DEFINER = {user CURRENT_USER}]
TRIGGER trigger_name, trigger_time, trigger event
ON tbl_name FOR EACH ROW trigger_smttPRAKTIKUM
Membuat database beserta tabel
Kali ini aku membuat database dengan nama "untidar" dan tabel dengan nama "tbl_mahasiswa" dengan beberapa kolom seperti pada gambar.
Membuat stored procedure dan memanggil stored procedue
Untuk membuat stored procedure bisa menggunakan sintaks seperti berikut:
DELIMITER //
CREATE PROCEDURE view_mhs_simple()
BEGIN
SELECT npm, nama, no_hp
FROM tbl_mahasiswa;
END; //DELIMITER //
CREATE PROCEDURE view_mhs_simple()
BEGIN
SELECT npm, nama, no_hp
FROM tbl_mahasiswa;
END; //dan panggil stored procedure
CALL view_mhs_simple();CALL view_mhs_simple();
Membuat function dan memanggil function
Untuk membuat function, kita bisa menggunakan sintaks seperti berikut:
DELIMITER $$
CREATE FUNCTION tambah (angka1 INT, angka2 INT) RETURNS INT
BEGIN
RETURN angka1 + angka2;
END; $$DELIMITER $$
CREATE FUNCTION tambah (angka1 INT, angka2 INT) RETURNS INT
BEGIN
RETURN angka1 + angka2;
END; $$fungsi di atas bisa berguna untuk melakukan penjumlahan seperti berikut:
SELECT tambah (4, 8)SELECT tambah (4, 8)
Trigger
Untuk trigger sendiri langkahnya lebih banyak dan kompleks dibandingkan dengan stored procedure dan function. Sebelum ke operasinya, kita membutuhkan dua tabel baru, yaitu tabel barang dan tabel pembelian.
- membuat trigger baru
Langkah awalnya pergi ke database yang sudah dibuat dan pergi ke bar yang bertuliskan trigger, isi detail trigger baru sesuai instruksi modul.
Setelah trigger berhasil dibuat, masukan sintaks ke dalam SQL
INSERT INTO barang VALUES
('A13', 'Modem', 5);INSERT INTO barang VALUES
('A13', 'Modem', 5);
- Melakukan drop trigger
Melakukan drop trigger sama dengan menghapus trigger yang sudah dibuat. Langkahnya sama seperti membuat trigger, pergi ke bar dengan menu trigger, di sana akan terlihat trigger yang tadi sudah dibuat. Klik drop untuk menghapus trigger.
- Keyword OLD dan NEW
Keyword OLD mengacu ke nilai lama, sementara keyword NEW merepresentasikan nilai baru. Untuk trigger INSERT, kita hanya bisa menggunakan kyword NEW karena tidak ada data lama.
- Cek tabel barang
- Masukan data ke dalam tabel pembelian lalu cek tabel
INSERT INTO pembelian (id_pembelian, id_brg, jml_beli) VALUES
('2', 'A10', '10')INSERT INTO pembelian (id_pembelian, id_brg, jml_beli) VALUES
('2', 'A10', '10')
- DELETE pada trigger
- Hapus data pada tabel barang
Karena id_brg di tabel barang memiliki relasi ke id_brg pada tabel pembelian, pastikan kalian hapus dulu data pada tabel pembelian sebelum menghapusnya di tabel barang.
#1 DELETE FROM pembelian WHERE id_brg = 'A10'
#2 DELETE FROM barang WHERE id_brg = 'A10'#1 DELETE FROM pembelian WHERE id_brg = 'A10'
#2 DELETE FROM barang WHERE id_brg = 'A10'- UPDATE trigger
- Lakukan update data dan cek tabel setelah update
UPDATE pembelian SET jml_beli = 20 WHERE id_pembelian = 3UPDATE pembelian SET jml_beli = 20 WHERE id_pembelian = 3TUGAS
- Membuat database baru dengan nama "tokobuku" yang di dalamnya terdapat tiga tabel, antara lain:
Tabel transaksi tidak diisi data seperti dua tabel sebelumnya karena table transaksi akan dipanggil menggunakan stored procedure.
- FUNCTION: Hitung diskon pelanggan
Create function terlebih dahulu supaya perintah hitung diskonnya jalan
DELIMITER //
CREATE FUNCTION hitung_diskon(total_belanja DECIMAL(10,2))
RETURNS DECIMAL(5,2)
DETERMINISTIC
BEGIN
DECLARE diskon DECIMAL(5,2);
IF total_belanja < 1000000 THEN
SET diskon = 0;
ELSEIF total_belanja <= 5000000 THEN
SET diskon = 5;
ELSE
SET diskon = 10;
END IF;
RETURN diskon;
END //
DELIMITER ;DELIMITER //
CREATE FUNCTION hitung_diskon(total_belanja DECIMAL(10,2))
RETURNS DECIMAL(5,2)
DETERMINISTIC
BEGIN
DECLARE diskon DECIMAL(5,2);
IF total_belanja < 1000000 THEN
SET diskon = 0;
ELSEIF total_belanja <= 5000000 THEN
SET diskon = 5;
ELSE
SET diskon = 10;
END IF;
RETURN diskon;
END //
DELIMITER ;lalu panggil function menggunakan
SELECT hitung_diskon(7000000);SELECT hitung_diskon(7000000);
- STORED PROCEDURE: Tambah transaksi
hitung harga
kurangi stok
UPDATE buku SET stok = stok - 3 WHERE id_buku = 1;UPDATE buku SET stok = stok - 3 WHERE id_buku = 1;
menambah data ke tabel transaksi dengan tanggal hari ini
INSERT INTO transaksi(id_pelanggan, id_buku, jumlah, total_harga, tanggal_transaksi) VALUES
(1, 1, 3, 240000, CURDATE());INSERT INTO transaksi(id_pelanggan, id_buku, jumlah, total_harga, tanggal_transaksi) VALUES
(1, 1, 3, 240000, CURDATE());
menambah nilai total_harga ke total_belanja pelanggan
UPDATE pelanggan SET total_belanja = total_belanja + 240000
WHERE id_pelanggan = 1;UPDATE pelanggan SET total_belanja = total_belanja + 240000
WHERE id_pelanggan = 1;
menampilkan pesan 'transaksi berhasil'
DELIMITER //
CREATE PROCEDURE tambah_transaksi(
IN p_id_pelanggan INT,
IN p_id_buku INT,
IN p_jumlah INT
)
BEGIN
DECLARE v_harga DECIMAL(10,2);
DECLARE v_stok INT;
DECLARE v_total DECIMAL(10,2);
SELECT harga, stok
INTO v_harga, v_stok
FROM buku
WHERE id_buku = p_id_buku;
IF v_stok < p_jumlah THEN
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'Stok tidak cukup';
ELSE
SET v_total = v_harga * p_jumlah;
UPDATE buku SET stok = stok - p_jumlah WHERE id_buku = p_id_buku;
INSERT INTO transaksi(id_pelanggan, id_buku, jumlah, total_harga, tanggal_transaksi)VALUES
(p_id_pelanggan, p_id_buku, p_jumlah, v_total, CURDATE());
UPDATE pelanggan
SET total_belanja = total_belanja + v_total
WHERE id_pelanggan = p_id_pelanggan;
SELECT 'Transaksi berhasil' AS pesan;
END IF;
END //
DELIMITER ;DELIMITER //
CREATE PROCEDURE tambah_transaksi(
IN p_id_pelanggan INT,
IN p_id_buku INT,
IN p_jumlah INT
)
BEGIN
DECLARE v_harga DECIMAL(10,2);
DECLARE v_stok INT;
DECLARE v_total DECIMAL(10,2);
SELECT harga, stok
INTO v_harga, v_stok
FROM buku
WHERE id_buku = p_id_buku;
IF v_stok < p_jumlah THEN
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'Stok tidak cukup';
ELSE
SET v_total = v_harga * p_jumlah;
UPDATE buku SET stok = stok - p_jumlah WHERE id_buku = p_id_buku;
INSERT INTO transaksi(id_pelanggan, id_buku, jumlah, total_harga, tanggal_transaksi)VALUES
(p_id_pelanggan, p_id_buku, p_jumlah, v_total, CURDATE());
UPDATE pelanggan
SET total_belanja = total_belanja + v_total
WHERE id_pelanggan = p_id_pelanggan;
SELECT 'Transaksi berhasil' AS pesan;
END IF;
END //
DELIMITER ;call menggunakan sintaks berikut
CALL tambah_transaksi(1,2,3);CALL tambah_transaksi(1,2,3);
TRIGGER: Update status member otomatis
DELIMITER //
CREATE TRIGGER update_status_member
AFTER UPDATE
ON pelanggan
FOR EACH ROW
BEGIN
IF NEW.total_belanja >= 5000000 THEN
UPDATE pelanggan
SET status_member = 'PLATINUM'
WHERE id_pelanggan = NEW.id_pelanggan;
ELSEIF NEW.total_belanja >= 1000000 THEN
UPDATE pelanggan
SET status_member = 'GOLD'
WHERE id_pelanggan = NEW.id_pelanggan;
ELSE
UPDATE pelanggan
SET status_member = 'REGULER'
WHERE id_pelanggan = NEW.id_pelanggan;
END IF;
END //
DELIMITER ;DELIMITER //
CREATE TRIGGER update_status_member
AFTER UPDATE
ON pelanggan
FOR EACH ROW
BEGIN
IF NEW.total_belanja >= 5000000 THEN
UPDATE pelanggan
SET status_member = 'PLATINUM'
WHERE id_pelanggan = NEW.id_pelanggan;
ELSEIF NEW.total_belanja >= 1000000 THEN
UPDATE pelanggan
SET status_member = 'GOLD'
WHERE id_pelanggan = NEW.id_pelanggan;
ELSE
UPDATE pelanggan
SET status_member = 'REGULER'
WHERE id_pelanggan = NEW.id_pelanggan;
END IF;
END //
DELIMITER ;
Sekian pembahasan mengenai modul 9 yang berisi Procedure, Function, dan Trigger a.k.a laprak Basis Data terakhir. Semoga pembaca dapat memahami langkah-langkah dalam laporan dengan baik, dan selamat UAS. Adios!