Archive for October 2026
contoh prosedur dan 5 perintah utama di phpmyadmin
1.MEMBUAT PROSEDUR
2.CALL PROSEDUR
A.LIMA PERINTAH UTAMA PROSEDUR
1.SELECT PROSEDUR
2.INSERT PROSEDUR
3.UPDATE PROSEDUR
4.DELETE PROSEDUR
5.WHERE PROSEDUR
pengertian dan contoh prosedur dalam database
Materi Lengkap Stored Procedure dalam Database MySQL
Dalam database, prosedur biasanya merujuk pada Stored Procedure, yaitu sekumpulan perintah SQL yang disimpan di dalam database dan dapat dijalankan kembali ketika dibutuhkan.
Stored Procedure sering digunakan dalam MySQL, MariaDB, phpMyAdmin, dan Laragon untuk menjalankan pekerjaan database secara otomatis dan terstruktur.
Contohnya, pada database toko kamu ingin menampilkan seluruh barang, menambahkan barang baru, atau mengurangi stok setelah transaksi. Daripada menulis perintah SQL dari awal setiap kali, kamu bisa membuat prosedur untuk menjalankan pekerjaan tersebut.
1. Pengertian prosedur dalam database
Stored Procedure adalah kumpulan satu atau lebih perintah SQL yang disimpan dengan sebuah nama di dalam database, sehingga bisa dipanggil dan dijalankan kembali.
Misalnya kamu membuat prosedur bernama tampilkan_barang. Ketika prosedur tersebut dipanggil, database akan menjalankan perintah yang sudah disimpan di dalamnya.
Gambaran sederhananya:
Pengguna / Aplikasi
Meminta pekerjaan dilakukan
CALL tampilkan_barang();
Memanggil prosedur
Stored Procedure
Menjalankan perintah SQL yang tersimpan
Hasil
Data ditampilkan atau diproses sesuai perintah
Perlu diingat, prosedur tidak selalu menghasilkan tampilan data. Prosedur juga bisa menambahkan data, mengubah stok, menghapus data, menghitung nilai, atau menjalankan beberapa operasi sekaligus.
2. Fungsi dan tujuan Stored Procedure
Stored Procedure memiliki beberapa kegunaan.
Menghemat waktu: perintah yang sama tidak perlu ditulis berulang kali.
Mempermudah pekerjaan: cukup memanggil prosedur dengan perintah
CALL.Mengurangi kesalahan: logika SQL yang sudah dibuat bisa digunakan kembali.
Mengelompokkan proses: beberapa perintah SQL dapat diletakkan dalam satu prosedur.
Menerima parameter: prosedur bisa menerima nilai seperti ID barang, harga, jumlah stok, atau nama pelanggan.
Membantu keamanan: pengguna dapat diberi izin menjalankan prosedur tertentu tanpa harus diberi akses langsung ke seluruh tabel, jika hak akses database diatur dengan tepat.
Memudahkan pemeliharaan: logika yang dipakai oleh aplikasi dapat dikelola di dalam database.
Contoh penerapannya:
Sekolah: menampilkan nilai siswa berdasarkan NIS.
Perpustakaan: mencatat peminjaman buku.
Toko: menambahkan barang dan memperbarui stok.
Pemesanan tiket: menghitung total biaya pemesanan.
3. Perbedaan prosedur, query biasa, dan function
Ketiga istilah ini sering membingungkan pemula.
Aspek | Query biasa | Stored Procedure | Stored Function |
|---|---|---|---|
Pengertian | Perintah SQL yang dijalankan langsung | Kumpulan perintah SQL bernama | Program database yang mengembalikan satu nilai |
Cara menjalankan | Contoh: | Contoh: | Contoh: |
Parameter | Bisa menggunakan nilai atau parameter aplikasi | Mendukung | Memiliki parameter input |
Hasil | Bergantung pada query | Bisa berupa hasil query, perubahan data, atau output parameter | Mengembalikan nilai melalui |
Kegunaan | Operasi langsung | Menjalankan proses atau rangkaian perintah | Menghitung atau menghasilkan sebuah nilai |
Contoh query biasa:
SELECT * FROM barang;Contoh Stored Procedure:
CALL tampilkan_barang();Contoh Stored Function:
SELECT hitung_total(5000, 3);Function hitung_total pada contoh terakhir harus dibuat terlebih dahulu sebelum bisa dipanggil.
Cara mudah mengingat: procedure menjalankan suatu proses, sedangkan function dirancang untuk mengembalikan sebuah nilai yang dapat digunakan dalam ekspresi SQL.
4. Struktur dasar Stored Procedure
Dalam MySQL, Stored Procedure dibuat menggunakan perintah CREATE PROCEDURE.
Bentuk umumnya seperti ini:
DELIMITER //
CREATE PROCEDURE nama_prosedur()
BEGIN
-- Perintah SQL ditulis di sini
END //
DELIMITER ;Mari kita bahas satu per satu.
DELIMITER //mengubah tanda akhir perintah sementara dari;menjadi//.CREATE PROCEDUREdigunakan untuk membuat prosedur baru.nama_prosedur()adalah nama prosedur yang kamu buat.BEGINmenandai awal kumpulan perintah.Perintah SQL di dalamnya adalah pekerjaan yang akan dilakukan.
ENDmenandai akhir kumpulan perintah.//menandai akhir definisi prosedur.DELIMITER ;mengembalikan tanda akhir perintah menjadi titik koma.
Mengapa perlu DELIMITER?
Karena isi prosedur biasanya mempunyai beberapa perintah SQL yang masing-masing diakhiri dengan ;. Kita perlu mengganti pembatas sementara agar MySQL mengetahui bahwa seluruh definisi prosedur belum selesai sampai mencapai //.
Catatan: DELIMITER adalah perintah pengatur pembatas yang digunakan oleh klien MySQL, termasuk tab SQL phpMyAdmin pada penggunaan yang mendukungnya. Itu bukan perintah SQL yang dijalankan sebagai bagian dari isi prosedur.
5. Contoh pertama: prosedur untuk menampilkan data barang
Kita gunakan database toko dengan tabel barang.
Misalnya struktur tabelnya:
CREATE DATABASE IF NOT EXISTS toko;
USE toko;
CREATE TABLE IF NOT EXISTS barang (
id_barang INT AUTO_INCREMENT PRIMARY KEY,
nama_barang VARCHAR(100) NOT NULL,
harga DECIMAL(10,2) NOT NULL,
stok INT NOT NULL DEFAULT 0
);Tambahkan beberapa data untuk latihan:
INSERT INTO barang (nama_barang, harga, stok)
VALUES
('Buku', 5000, 10),
('Pensil', 2000, 20),
('Pulpen', 4000, 15);Sekarang buat prosedurnya.
DELIMITER //
CREATE PROCEDURE tampilkan_barang()
BEGIN
SELECT * FROM barang;
END //
DELIMITER ;Cara menjalankannya
CALL tampilkan_barang();Hasilnya berupa semua data yang ada di tabel barang.
Penjelasan:
CREATE PROCEDURE tampilkan_barang()membuat prosedur tanpa parameter.BEGIN ... ENDmenampung perintah yang dijalankan.SELECT * FROM barangmengambil seluruh data.CALL tampilkan_barang()menjalankan prosedur tersebut.
Kamu bisa memanggil prosedur yang sama berkali-kali tanpa perlu menulis ulang query SELECT.
6. Prosedur dengan parameter IN
Parameter adalah nilai yang dikirimkan ke prosedur ketika prosedur dipanggil.
Ada tiga jenis parameter pada Stored Procedure MySQL:
IN: menerima nilai dari pemanggil.OUT: mengembalikan nilai melalui parameter keluaran.INOUT: menerima nilai awal sekaligus mengembalikan nilai yang sudah diubah.
Kita bahas mulai dari IN.
Contoh: mencari barang berdasarkan ID
DELIMITER //
CREATE PROCEDURE cari_barang(
IN p_id INT
)
BEGIN
SELECT *
FROM barang
WHERE id_barang = p_id;
END //
DELIMITER ;Menjalankan prosedur:
CALL cari_barang(1);Hasilnya adalah data barang dengan ID 1, jika barang tersebut tersedia.
Penjelasan:
p_idadalah nama parameter.INberarti prosedur menerima nilai dari luar.INTberarti parameter tersebut berupa bilangan bulat.Angka
1padaCALL cari_barang(1)menjadi nilaip_id.WHERE id_barang = p_idmencari barang yang ID-nya sesuai dengan nilai parameter.
Kamu juga bisa memanggilnya dengan ID lain:
CALL cari_barang(2);
CALL cari_barang(3);Tidak perlu membuat prosedur baru untuk setiap ID barang.
7. Prosedur untuk menambahkan data
Stored Procedure juga bisa digunakan untuk menjalankan perintah INSERT.
Contohnya, kita membuat prosedur untuk menambahkan barang baru.
DELIMITER //
CREATE PROCEDURE tambah_barang(
IN p_nama VARCHAR(100),
IN p_harga DECIMAL(10,2),
IN p_stok INT
)
BEGIN
INSERT INTO barang (nama_barang, harga, stok)
VALUES (p_nama, p_harga, p_stok);
END //
DELIMITER ;Cara menjalankannya:
CALL tambah_barang('Penggaris', 3000, 12);Perintah tersebut menambahkan barang bernama Penggaris dengan harga 3.000 dan stok 12.
Untuk memastikan data berhasil masuk, jalankan:
SELECT * FROM barang;Prosedur tersebut menggunakan tiga parameter:
Parameter | Tipe data | Kegunaan |
|---|---|---|
|
| Nama barang |
|
| Harga barang |
|
| Jumlah stok |
Huruf p_ hanya kebiasaan penamaan untuk membedakan parameter dari nama kolom; bukan aturan wajib MySQL.
8. Prosedur untuk mengubah data
Misalnya kamu ingin mengubah harga barang tertentu tanpa menulis query UPDATE dari awal setiap kali.
Buat prosedur berikut:
DELIMITER //
CREATE PROCEDURE ubah_harga(
IN p_id INT,
IN p_harga_baru DECIMAL(10,2)
)
BEGIN
UPDATE barang
SET harga = p_harga_baru
WHERE id_barang = p_id;
END //
DELIMITER ;Cara menjalankannya:
CALL ubah_harga(1, 7500);Artinya, harga barang dengan ID 1 diubah menjadi 7.500.
Perintah WHERE id_barang = p_id penting agar perubahan hanya mengenai barang yang dimaksud, bukan seluruh barang.
9. Prosedur untuk menghapus data
Contoh berikut menghapus barang berdasarkan ID.
DELIMITER //
CREATE PROCEDURE hapus_barang(
IN p_id INT
)
BEGIN
DELETE FROM barang
WHERE id_barang = p_id;
END //
DELIMITER ;Cara menjalankannya:
CALL hapus_barang(3);Artinya, menghapus barang dengan ID 3.
Periksa kembali ID yang akan dihapus sebelum menjalankan prosedur. Jika ada relasi FOREIGN KEY, penghapusan juga bisa ditolak atau berdampak pada tabel terkait, tergantung aturan relasinya.
10. Prosedur menggunakan IF dan ELSE
Prosedur dapat memiliki logika atau percabangan, bukan hanya menjalankan satu query.
Misalnya, kita ingin memeriksa apakah stok barang cukup.
DELIMITER //
CREATE PROCEDURE cek_stok(
IN p_id INT
)
BEGIN
IF EXISTS (
SELECT 1
FROM barang
WHERE id_barang = p_id
AND stok > 0
) THEN
SELECT 'Barang tersedia' AS pesan;
ELSE
SELECT 'Barang tidak ditemukan atau stok habis'
AS pesan;
END IF;
END //
DELIMITER ;Cara menjalankannya:
CALL cek_stok(1);Jika barang dengan ID 1 ditemukan dan stoknya lebih dari nol, hasilnya adalah Barang tersedia. Jika tidak, prosedur menampilkan pesan alternatif.
Struktur dasarnya:
IF kondisi THEN
-- Dilakukan jika kondisi benar
ELSE
-- Dilakukan jika kondisi salah
END IF;Kamu juga dapat menggunakan ELSEIF untuk memeriksa beberapa kondisi secara berurutan.
Contoh:
DELIMITER //
CREATE PROCEDURE status_stok(
IN p_id INT
)
BEGIN
DECLARE v_stok INT DEFAULT NULL;
SELECT stok INTO v_stok
FROM barang
WHERE id_barang = p_id
LIMIT 1;
IF v_stok IS NULL THEN
SELECT 'Barang tidak ditemukan' AS pesan;
ELSEIF v_stok = 0 THEN
SELECT 'Stok habis' AS pesan;
ELSEIF v_stok < 5 THEN
SELECT 'Stok menipis' AS pesan;
ELSE
SELECT 'Stok aman' AS pesan;
END IF;
END //
DELIMITER ;DECLARE digunakan untuk membuat variabel lokal. Variabel v_stok menampung nilai stok yang ditemukan. Dalam contoh ini, NULL digunakan sebagai penanda jika ID tidak ditemukan, sehingga stok yang benar-benar bernilai nol tetap bisa dibedakan.
11. Prosedur menggunakan parameter OUT
Parameter OUT digunakan ketika prosedur perlu mengirimkan sebuah nilai kembali melalui parameter.
Misalnya kamu ingin menghitung jumlah seluruh barang yang tersimpan di tabel.
DELIMITER //
CREATE PROCEDURE hitung_barang(
OUT p_jumlah INT
)
BEGIN
SELECT COUNT(*)
INTO p_jumlah
FROM barang;
END //
DELIMITER ;Cara menjalankannya:
CALL hitung_barang(@jumlah);
SELECT @jumlah AS total_barang;Penjelasan:
OUT p_jumlah INT: menyediakan parameter untuk menampung hasil.COUNT(*): menghitung jumlah baris.INTO p_jumlah: memasukkan hasil perhitungan ke parameterOUT.@jumlah: variabel sesi MySQL yang digunakan untuk menerima hasil.SELECT @jumlah: menampilkan nilai hasil perhitungan.
Misalnya terdapat tiga baris dalam tabel, hasilnya adalah 3.
Contoh OUT untuk menghitung total stok
DELIMITER //
CREATE PROCEDURE hitung_total_stok(
OUT p_total INT
)
BEGIN
SELECT COALESCE(SUM(stok), 0)
INTO p_total
FROM barang;
END //
DELIMITER ;Jalankan:
CALL hitung_total_stok(@total);
SELECT @total AS total_stok;COALESCE(SUM(stok), 0) memastikan hasilnya nol jika tabel tidak memiliki data yang dapat dijumlahkan.
12. Prosedur menggunakan parameter INOUT
INOUT memungkinkan nilai masuk ke prosedur, diubah di dalam prosedur, kemudian dikembalikan melalui parameter yang sama.
Contoh sederhana: menambah angka sebanyak 10.
DELIMITER //
CREATE PROCEDURE tambah_sepuluh(
INOUT p_angka INT
)
BEGIN
SET p_angka = p_angka + 10;
END //
DELIMITER ;Cara menjalankan:
SET @angka = 5;
CALL tambah_sepuluh(@angka);
SELECT @angka AS hasil;Hasilnya adalah 15.
Alurnya:
Nilai awal
@angkaadalah 5.Prosedur menerima nilai tersebut.
Perintah
SETmenambahkan 10.Nilai baru dikembalikan melalui parameter
INOUT.SELECT @angkamenampilkan 15.
Perbedaan ketiga parameter:
Parameter | Menerima nilai awal | Mengirim hasil kembali |
|---|---|---|
| Ya | Tidak melalui parameter tersebut |
| Tidak digunakan sebagai nilai masukan | Ya |
| Ya | Ya |
13. Prosedur menggunakan perulangan LOOP
Selain IF, prosedur juga dapat menjalankan perulangan untuk melakukan pekerjaan berulang.
Contoh berikut menghitung penjumlahan angka dari 1 sampai angka yang diberikan.
DELIMITER //
CREATE PROCEDURE jumlah_berurutan(
IN p_batas INT,
OUT p_hasil INT
)
BEGIN
DECLARE v_i INT DEFAULT 1;
SET p_hasil = 0;
WHILE v_i <= p_batas DO
SET p_hasil = p_hasil + v_i;
SET v_i = v_i + 1;
END WHILE;
END //
DELIMITER ;Cara menjalankannya:
CALL jumlah_berurutan(5, @hasil);
SELECT @hasil AS hasil;Hasilnya adalah 15, karena:
\(1 + 2 + 3 + 4 + 5 = 15\)
Penjelasan:
DECLARE v_i INT DEFAULT 1: membuat variabel penghitung mulai dari 1.SET p_hasil = 0: mengatur hasil awal menjadi nol.WHILE v_i <= p_batas DO: mengulang selama penghitung tidak melebihi batas.SET p_hasil = p_hasil + v_i: menambahkan nilai penghitung ke hasil.SET v_i = v_i + 1: menaikkan penghitung agar perulangan berhenti pada waktunya.END WHILE: menandai akhir perulangan.
Perulangan harus memiliki kondisi berhenti yang benar. Jika kondisi tidak pernah menjadi salah, prosedur dapat terus berjalan hingga mencapai batas waktu atau batas eksekusi.
14. Prosedur dengan transaksi: START TRANSACTION, COMMIT, dan ROLLBACK
Stored Procedure juga bisa mengelompokkan beberapa perubahan data agar dijalankan sebagai satu transaksi.
Misalnya sebuah toko menjual barang. Prosesnya adalah mengurangi stok barang. Kita ingin memastikan stok cukup sebelum dikurangi.
Contoh prosedur:
DELIMITER //
CREATE PROCEDURE kurangi_stok(
IN p_id INT,
IN p_jumlah INT
)
BEGIN
DECLARE v_stok INT DEFAULT NULL;
DECLARE EXIT HANDLER FOR SQLEXCEPTION
BEGIN
ROLLBACK;
RESIGNAL;
END;
IF p_jumlah <= 0 THEN
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'Jumlah harus lebih dari nol';
END IF;
START TRANSACTION;
SELECT stok INTO v_stok
FROM barang
WHERE id_barang = p_id
FOR UPDATE;
IF v_stok IS NULL THEN
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'Barang tidak ditemukan';
ELSEIF v_stok < p_jumlah THEN
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'Stok tidak mencukupi';
END IF;
UPDATE barang
SET stok = stok - p_jumlah
WHERE id_barang = p_id;
COMMIT;
END //
DELIMITER ;Jalankan:
CALL kurangi_stok(1, 2);Jika stok barang ID 1 mencukupi, stok akan dikurangi sebanyak dua.
Penjelasan beberapa bagian baru:
START TRANSACTION: memulai transaksi.FOR UPDATE: mengunci baris yang dibaca agar perubahan stok dapat diperiksa dengan lebih aman saat ada transaksi bersamaan, dengan asumsi mesin tabel mendukungnya.COMMIT: mengesahkan perubahan.ROLLBACK: membatalkan perubahan transaksi jika terjadi kesalahan.DECLARE EXIT HANDLER FOR SQLEXCEPTION: menangani kesalahan SQL yang terjadi di dalam blok prosedur.SIGNAL SQLSTATE '45000': menghasilkan kesalahan yang ditentukan pengguna.RESIGNAL: meneruskan kembali kesalahan setelah penanganan.
Contoh ini menggunakan tabel transaksional seperti InnoDB. Pada prosedur yang mengelola transaksi, pastikan juga aturan transaksi aplikasi sudah jelas, terutama jika prosedur dipanggil dari aplikasi yang sedang menjalankan transaksi sendiri.
15. Cara melihat, menghapus, dan mengubah Stored Procedure
Setelah prosedur dibuat, kamu bisa mengelolanya seperti objek database lainnya.
A. Melihat daftar prosedur
SHOW PROCEDURE STATUS
WHERE Db = 'toko';Perintah tersebut menampilkan informasi prosedur pada database toko.
B. Melihat kode prosedur
SHOW CREATE PROCEDURE tampilkan_barang;Perintah ini menampilkan definisi prosedur yang tersimpan.
C. Menghapus prosedur
DROP PROCEDURE tampilkan_barang;Jika prosedur mungkin belum ada, gunakan:
DROP PROCEDURE IF EXISTS tampilkan_barang;Perintah DROP PROCEDURE menghapus prosedurnya, bukan otomatis menghapus tabel atau data yang pernah diprosesnya.
D. Mengubah prosedur
Pada MySQL, definisi prosedur yang sudah ada umumnya diperbarui dengan cara menghapus prosedur lama lalu membuatnya kembali.
Contohnya:
DROP PROCEDURE IF EXISTS tampilkan_barang;
DELIMITER //
CREATE PROCEDURE tampilkan_barang()
BEGIN
SELECT id_barang, nama_barang, harga, stok
FROM barang;
END //
DELIMITER ;Versi baru hanya menampilkan kolom yang ditentukan, bukan semua kolom.
Perhatikan bahwa menghapus dan membuat ulang prosedur dapat memengaruhi hak akses yang melekat pada prosedur tersebut. Pada database penting, periksa hak akses dan simpan definisi prosedur sebelum melakukan perubahan.
16. Cara membuat Stored Procedure di phpMyAdmin dan Laragon
Berikut langkah praktik yang bisa kamu ikuti di komputer.
Langkah 1 — Jalankan Laragon
Buka Laragon dan tekan Start All untuk menjalankan layanan yang diperlukan.
Langkah 2 — Buka phpMyAdmin
Pilih database toko pada bagian kiri. Jika belum ada, buat database tersebut terlebih dahulu.
Langkah 3 — Buka tab SQL
Salin kode pembuatan prosedur, tempelkan pada editor SQL, lalu klik Go/Kirim.
Langkah 4 — Periksa prosedur
Pada versi phpMyAdmin yang mendukungnya, prosedur dapat dilihat melalui bagian Routines/Rutinitas pada database.
Setelah berhasil dibuat, jalankan prosedur menggunakan CALL, misalnya:
CALL tampilkan_barang();Jika muncul error pada DELIMITER: dukungan pengaturan delimiter bisa berbeda tergantung editor dan versi phpMyAdmin. Pastikan prosedur dijalankan melalui editor SQL yang mendukung pembuatan rutin. Jika perlu, gunakan klien MySQL atau MariaDB yang mendukung perintah DELIMITER.
17. Kelebihan dan kekurangan Stored Procedure
Kelebihan | Kekurangan |
|---|---|
Bisa digunakan berulang kali | Perlu memahami sintaks khusus |
Mengurangi penulisan query berulang | Kesalahan pada prosedur dapat memengaruhi aplikasi |
Dapat mengelompokkan banyak perintah SQL | Perlu pengelolaan versi dan dokumentasi |
Bisa menerima parameter | Debugging bisa lebih sulit dibandingkan query sederhana |
Mendukung pengaturan hak akses | Tidak semua logika aplikasi cocok diletakkan di database |
Stored Procedure paling bermanfaat ketika suatu proses database sering dilakukan dan memiliki aturan yang perlu dijalankan secara konsisten.
18. Latihan mandiri
Coba kerjakan latihan berikut menggunakan database toko dan tabel barang yang telah dibuat sebelumnya.
Pilih setiap soal untuk melihat contoh jawaban.
1. Buat prosedur bernama tampilkan_barang untuk menampilkan semua data barang.
CREATE PROCEDURE tampilkan_barang() BEGIN SELECT * FROM barang; END
Salin contoh kode2. Buat prosedur cari_barang yang menerima parameter ID barang.
CREATE PROCEDURE cari_barang(IN p_id INT) BEGIN SELECT * FROM barang WHERE id_barang = p_id; END
Salin contoh kode3. Buat prosedur tambah_barang dengan parameter nama, harga, dan stok.
CREATE PROCEDURE tambah_barang(IN p_nama VARCHAR(100), IN p_harga DECIMAL(10,2), IN p_stok INT) BEGIN INSERT INTO barang(nama_barang, harga, stok) VALUES(p_nama, p_harga, p_stok); END
Salin contoh kode4. Buat prosedur untuk menghitung jumlah seluruh barang dengan parameter OUT.
CREATE PROCEDURE hitung_barang(OUT p_jumlah INT) BEGIN SELECT COUNT(*) INTO p_jumlah FROM barang; END
Salin contoh kodeCatatan: jawaban latihan di atas menunjukkan isi dasar prosedur. Untuk menjalankannya sebagai definisi lengkap melalui klien SQL, tambahkan pembatas DELIMITER seperti pada contoh sebelumnya dan pilih database yang benar.
Kesimpulan
Hal paling penting untuk diingat:
CREATE PROCEDUREuntuk membuat prosedur.CALLuntuk menjalankan prosedur.INuntuk menerima parameter.OUTuntuk mengembalikan hasil melalui parameter.INOUTuntuk menerima sekaligus mengembalikan nilai.IFdanELSEuntuk percabangan.WHILEdanLOOPuntuk perulangan.DROP PROCEDUREuntuk menghapus prosedur.SHOW CREATE PROCEDUREuntuk melihat definisi prosedur.
Untuk belajar lebih lanjut, kamu bisa berlatih membuat satu prosedur setiap hari, mulai dari menampilkan data, mencari berdasarkan ID, menambahkan barang, sampai mengelola stok dengan transaksi. Mau saya bantu mengingatkan dan memberi latihan database secara rutin?
Materi Lengkap Prosedur dalam Basis Data (Stored Procedure)
Prosedur dalam basis data merupakan salah satu materi penting dalam SQL, terutama jika kamu belajar MySQL, MariaDB, phpMyAdmin, dan Laragon.
Materi ini akan membahas pengertian prosedur, fungsi, struktur, jenis parameter, serta perintah CREATE, CALL, ALTER atau perubahan prosedur, DROP, dan contoh penggunaan lainnya secara bertahap.
1. Apa itu prosedur dalam basis data?
Prosedur dalam basis data atau Stored Procedure adalah kumpulan perintah SQL yang disimpan di dalam database dengan nama tertentu dan dapat dijalankan kembali ketika diperlukan.
Perintah di dalam prosedur bisa digunakan untuk menampilkan data, menambahkan data, mengubah data, menghapus data, melakukan perhitungan, dan menjalankan beberapa proses secara berurutan.
Contoh sederhananya, kamu mempunyai database toko yang menyimpan data barang. Setiap kali ingin menampilkan seluruh barang, kamu biasanya menulis:
SELECT * FROM barang;Jika kamu membuat prosedur bernama tampilkan_barang, kamu cukup menjalankan:
CALL tampilkan_barang();Database kemudian menjalankan perintah SQL yang sudah disimpan dalam prosedur tersebut.
2. Tujuan dan fungsi prosedur
Stored Procedure memiliki beberapa fungsi utama:
Mempermudah pekerjaan: kamu tidak perlu menulis ulang query yang sama berkali-kali.
Menghemat waktu: cukup memanggil prosedur menggunakan perintah
CALL.Mengelompokkan perintah: beberapa perintah SQL dapat dijalankan dalam satu prosedur.
Mengurangi kesalahan: proses yang sama bisa menggunakan aturan SQL yang sudah ditentukan.
Menerima parameter: prosedur dapat menerima data seperti ID barang, harga, jumlah, dan nama pelanggan.
Mendukung keamanan: hak akses dapat diatur agar pengguna tertentu hanya dapat menjalankan prosedur yang diizinkan.
Mempermudah pengelolaan aplikasi: logika pemrosesan data tertentu dapat ditempatkan di database.
Contoh penerapan prosedur:
Sekolah: mencari nilai siswa berdasarkan NIS.
Perpustakaan: mencatat peminjaman buku.
Toko: menambahkan barang dan memperbarui stok.
Penjualan: menghitung total transaksi.
3. Perbedaan prosedur dan query biasa
Aspek | Query biasa | Stored Procedure |
|---|---|---|
Pengertian | Perintah SQL yang langsung dijalankan | Kumpulan perintah SQL yang disimpan dengan nama |
Cara menjalankan | Langsung menjalankan query | Menggunakan |
Bisa digunakan berulang kali | Bisa, tetapi query perlu dikirim lagi | Bisa dengan memanggil prosedur |
Parameter | Bergantung pada query dan aplikasi | Mendukung |
Proses kompleks | Bisa dilakukan dengan beberapa query | Bisa menggabungkan beberapa perintah dan logika dalam satu prosedur |
Contoh query biasa:
SELECT * FROM barang;Contoh Stored Procedure:
CALL tampilkan_barang();Keduanya dapat menampilkan data, tetapi Stored Procedure memungkinkan perintah disimpan dan digunakan kembali dengan nama yang sudah ditentukan.
4. Struktur dasar Stored Procedure
Untuk membuat prosedur di MySQL, kita menggunakan perintah CREATE PROCEDURE.
Bentuk dasarnya:
DELIMITER //
CREATE PROCEDURE nama_prosedur()
BEGIN
-- Perintah SQL ditulis di sini
END //
DELIMITER ;Penjelasan setiap bagian:
Bagian | Fungsi |
|---|---|
| Mengubah pembatas akhir perintah sementara menjadi |
| Membuat prosedur baru |
| Nama prosedur yang akan dibuat |
| Menandai awal isi prosedur |
Perintah SQL | Perintah yang akan dijalankan |
| Menandai akhir isi prosedur |
| Menandai akhir definisi prosedur |
| Mengembalikan pembatas menjadi titik koma |
Mengapa menggunakan DELIMITER? Karena di dalam prosedur kita bisa mempunyai banyak perintah SQL yang diakhiri dengan titik koma. Pembatas sementara membantu klien MySQL mengetahui bahwa definisi prosedur belum selesai sampai ditemukan //.
Catatan: DELIMITER merupakan perintah pengatur pembatas pada klien MySQL, bukan bagian dari isi prosedur yang disimpan di database.
5. CREATE PROCEDURE — membuat prosedur
CREATE PROCEDURE digunakan untuk membuat prosedur baru di dalam database.
Mari kita gunakan contoh database toko.
Pertama, buat database dan tabelnya jika belum tersedia:
CREATE DATABASE IF NOT EXISTS toko;
USE toko;
CREATE TABLE IF NOT EXISTS barang (
id_barang INT AUTO_INCREMENT PRIMARY KEY,
nama_barang VARCHAR(100) NOT NULL,
harga DECIMAL(10,2) NOT NULL,
stok INT NOT NULL DEFAULT 0
);Masukkan data contoh:
INSERT INTO barang (nama_barang, harga, stok)
VALUES
('Buku', 5000, 10),
('Pensil', 2000, 20),
('Pulpen', 4000, 15);Sekarang buat prosedur untuk menampilkan data barang:
DELIMITER //
CREATE PROCEDURE tampilkan_barang()
BEGIN
SELECT * FROM barang;
END //
DELIMITER ;Prosedur tampilkan_barang sekarang tersimpan di database toko.
6. CALL — menjalankan prosedur
Setelah prosedur dibuat, kita menggunakan CALL untuk menjalankannya.
CALL tampilkan_barang();Hasilnya adalah seluruh data yang tersimpan di tabel barang.
Perhatikan perbedaannya:
CREATE PROCEDUREmembuat dan menyimpan prosedur.CALLmenjalankan prosedur yang sudah dibuat.
Jika prosedur belum dibuat, perintah CALL tidak akan berhasil.
7. SELECT di dalam prosedur — menampilkan data
Perintah SELECT tetap bisa digunakan di dalam Stored Procedure.
Contoh menampilkan barang dengan stok kurang dari lima:
DELIMITER //
CREATE PROCEDURE barang_stok_menipis()
BEGIN
SELECT *
FROM barang
WHERE stok < 5;
END //
DELIMITER ;Jalankan:
CALL barang_stok_menipis();Prosedur akan menampilkan barang yang stoknya kurang dari lima.
Kamu juga bisa menggunakan ORDER BY di dalam prosedur:
DELIMITER //
CREATE PROCEDURE urutkan_harga()
BEGIN
SELECT *
FROM barang
ORDER BY harga DESC;
END //
DELIMITER ;Perintah tersebut menampilkan barang dari harga tertinggi ke terendah.
8. IN — prosedur dengan parameter masukan
Parameter adalah nilai yang diberikan ketika prosedur dijalankan.
IN digunakan untuk menerima nilai dari pemanggil prosedur.
Contoh prosedur untuk mencari barang berdasarkan ID:
DELIMITER //
CREATE PROCEDURE cari_barang(
IN p_id INT
)
BEGIN
SELECT *
FROM barang
WHERE id_barang = p_id;
END //
DELIMITER ;Cara menjalankan:
CALL cari_barang(1);Angka 1 dikirim ke parameter p_id. Prosedur lalu mencari barang dengan id_barang = 1.
Contoh lainnya:
CALL cari_barang(2);
CALL cari_barang(3);Satu prosedur dapat digunakan untuk mencari banyak barang dengan ID yang berbeda.
9. INSERT di dalam prosedur — menambahkan data
Perintah INSERT digunakan untuk menambahkan data baru ke tabel.
Contoh membuat prosedur tambah barang:
DELIMITER //
CREATE PROCEDURE tambah_barang(
IN p_nama VARCHAR(100),
IN p_harga DECIMAL(10,2),
IN p_stok INT
)
BEGIN
INSERT INTO barang (nama_barang, harga, stok)
VALUES (p_nama, p_harga, p_stok);
END //
DELIMITER ;Cara menjalankan:
CALL tambah_barang('Penggaris', 3000, 12);Data Penggaris akan ditambahkan dengan harga 3.000 dan stok 12.
Keterangan parameter:
p_nama: nama barang.p_harga: harga barang.p_stok: jumlah stok.
ID barang tidak perlu dimasukkan karena menggunakan AUTO_INCREMENT.
10. UPDATE di dalam prosedur — mengubah data
UPDATE digunakan untuk mengubah data yang sudah tersimpan.
Contoh prosedur untuk mengubah harga barang berdasarkan ID:
DELIMITER //
CREATE PROCEDURE ubah_harga(
IN p_id INT,
IN p_harga_baru DECIMAL(10,2)
)
BEGIN
UPDATE barang
SET harga = p_harga_baru
WHERE id_barang = p_id;
END //
DELIMITER ;Cara menjalankan:
CALL ubah_harga(1, 7500);Artinya harga barang dengan ID 1 diubah menjadi 7.500.
Kamu juga dapat mengubah stok menggunakan prosedur:
DELIMITER //
CREATE PROCEDURE ubah_stok(
IN p_id INT,
IN p_stok_baru INT
)
BEGIN
UPDATE barang
SET stok = p_stok_baru
WHERE id_barang = p_id;
END //
DELIMITER ;Cara menjalankan:
CALL ubah_stok(1, 25);Penting: penggunaan WHERE memastikan hanya baris yang sesuai dengan ID yang diubah. Tanpa kondisi tersebut, seluruh baris tabel dapat terkena perubahan.
11. DELETE di dalam prosedur — menghapus data
DELETE digunakan untuk menghapus baris data dari tabel.
Contoh prosedur menghapus barang berdasarkan ID:
DELIMITER //
CREATE PROCEDURE hapus_barang(
IN p_id INT
)
BEGIN
DELETE FROM barang
WHERE id_barang = p_id;
END //
DELIMITER ;Cara menjalankan:
CALL hapus_barang(2);Barang dengan ID 2 akan dihapus dari tabel barang.
Perbedaan penting:
DELETE FROM barang WHERE id_barang = 2menghapus baris tertentu.DELETE FROM barangmenghapus semua baris.DROP PROCEDURE hapus_barangmenghapus definisi prosedurnya, bukan menjalankan perintah penghapusan barang.
Sebaiknya periksa ID terlebih dahulu dengan SELECT sebelum menjalankan prosedur penghapusan.
12. IF, ELSEIF, dan ELSE — membuat kondisi
Di dalam prosedur, kamu bisa membuat keputusan berdasarkan kondisi tertentu.
Contoh prosedur untuk menentukan status stok:
DELIMITER //
CREATE PROCEDURE cek_status_stok(
IN p_id INT
)
BEGIN
DECLARE v_stok INT DEFAULT NULL;
SELECT stok INTO v_stok
FROM barang
WHERE id_barang = p_id
LIMIT 1;
IF v_stok IS NULL THEN
SELECT 'Barang tidak ditemukan' AS pesan;
ELSEIF v_stok = 0 THEN
SELECT 'Stok habis' AS pesan;
ELSEIF v_stok < 5 THEN
SELECT 'Stok menipis' AS pesan;
ELSE
SELECT 'Stok aman' AS pesan;
END IF;
END //
DELIMITER ;Jalankan:
CALL cek_status_stok(1);Penjelasan:
DECLAREmembuat variabel lokal.SELECT ... INTOmenyimpan hasil query ke dalam variabel.IFmemeriksa kondisi pertama.ELSEIFmemeriksa kondisi berikutnya.ELSEdijalankan jika kondisi sebelumnya tidak terpenuhi.END IFmenutup struktur percabangan.
Dengan cara ini, satu prosedur bisa menangani beberapa kemungkinan hasil.
13. DELETE, DROP, dan TRUNCATE — apa bedanya?
Ketiga perintah ini sama-sama berkaitan dengan penghapusan, tetapi objek yang dihapus berbeda.
Perintah | Fungsi | Struktur tabel |
|---|---|---|
| Menghapus satu atau beberapa baris | Tetap ada |
| Mengosongkan seluruh baris | Tetap ada |
| Menghapus tabel beserta datanya | Hilang |
| Menghapus prosedur | Tabel tidak ikut terhapus |
| Menghapus seluruh database dan objek di dalamnya | Hilang |
Contoh:
DELETE FROM barang WHERE id_barang = 1;Menghapus barang dengan ID 1.
TRUNCATE TABLE barang;Menghapus semua baris barang.
DROP TABLE barang;Menghapus tabel barang beserta struktur dan datanya.
DROP PROCEDURE IF EXISTS tampilkan_barang;Menghapus prosedur tampilkan_barang.
Ingat: menghapus prosedur tidak sama dengan menghapus tabel. Prosedur hanyalah kumpulan perintah yang disimpan, sedangkan tabel menyimpan data.
14. OUT — mengembalikan hasil dari prosedur
Parameter OUT digunakan untuk mengirimkan hasil dari prosedur kepada pemanggilnya.
Contoh menghitung jumlah barang:
DELIMITER //
CREATE PROCEDURE hitung_barang(
OUT p_jumlah INT
)
BEGIN
SELECT COUNT(*)
INTO p_jumlah
FROM barang;
END //
DELIMITER ;Cara menjalankan:
CALL hitung_barang(@jumlah);
SELECT @jumlah AS total_barang;Penjelasan:
COUNT(*)menghitung jumlah baris.INTO p_jumlahmenyimpan hasil perhitungan.OUTmengirimkan nilai melalui parameter keluaran.@jumlahadalah variabel sesi untuk menerima hasil.
Contoh lain untuk menghitung total stok:
DELIMITER //
CREATE PROCEDURE hitung_total_stok(
OUT p_total INT
)
BEGIN
SELECT COALESCE(SUM(stok), 0)
INTO p_total
FROM barang;
END //
DELIMITER ;Jalankan:
CALL hitung_total_stok(@total);
SELECT @total AS total_stok;COALESCE memastikan hasilnya menjadi nol jika tidak ada nilai stok yang dapat dijumlahkan.
15. INOUT — menerima sekaligus mengembalikan nilai
INOUT digunakan ketika prosedur membutuhkan nilai awal, mengubahnya, lalu mengembalikan nilai yang baru.
Contoh:
DELIMITER //
CREATE PROCEDURE tambah_sepuluh(
INOUT p_angka INT
)
BEGIN
SET p_angka = p_angka + 10;
END //
DELIMITER ;Cara menjalankan:
SET @angka = 5;
CALL tambah_sepuluh(@angka);
SELECT @angka AS hasil;Hasilnya adalah 15.
Perbedaan parameter:
Jenis | Fungsi |
|---|---|
| Menerima nilai masukan |
| Mengirimkan nilai keluaran |
| Menerima nilai dan mengembalikan nilai yang telah diubah |
16. WHILE dan LOOP — perulangan dalam prosedur
Prosedur dapat menjalankan suatu perintah berulang kali menggunakan struktur perulangan.
Contoh menggunakan WHILE untuk menjumlahkan angka dari 1 sampai batas tertentu:
DELIMITER //
CREATE PROCEDURE jumlah_berurutan(
IN p_batas INT,
OUT p_hasil INT
)
BEGIN
DECLARE v_i INT DEFAULT 1;
SET p_hasil = 0;
WHILE v_i <= p_batas DO
SET p_hasil = p_hasil + v_i;
SET v_i = v_i + 1;
END WHILE;
END //
DELIMITER ;Jalankan:
CALL jumlah_berurutan(5, @hasil);
SELECT @hasil AS hasil;Hasilnya adalah 15, yaitu penjumlahan angka 1 sampai 5.
Penjelasan:
DECLARE v_i INT DEFAULT 1membuat variabel penghitung.WHILEmenjalankan perintah selama kondisi benar.SETdigunakan untuk mengubah nilai variabel.END WHILEmenandai akhir perulangan.
Perulangan harus memiliki kondisi berhenti yang benar agar tidak terus berjalan tanpa akhir.
17. ALTER PROCEDURE — mengubah prosedur
Dalam MySQL, ALTER PROCEDURE tersedia untuk mengubah karakteristik tertentu dari prosedur, seperti komentar atau karakteristik SQL. Namun, perintah ini bukan cara untuk mengganti isi utama prosedur.
Untuk mengubah isi prosedur, cara yang umum digunakan adalah menghapus prosedur lama kemudian membuatnya kembali.
Contoh:
DROP PROCEDURE IF EXISTS tampilkan_barang;
DELIMITER //
CREATE PROCEDURE tampilkan_barang()
BEGIN
SELECT id_barang, nama_barang, harga, stok
FROM barang
ORDER BY nama_barang ASC;
END //
DELIMITER ;Sekarang prosedur tampilkan_barang akan menampilkan barang berdasarkan urutan nama dari A sampai Z.
Perhatikan bahwa menghapus dan membuat ulang prosedur bisa memengaruhi hak akses yang sebelumnya diberikan pada prosedur tersebut.
18. SHOW PROCEDURE — melihat prosedur yang tersimpan
Kamu dapat melihat daftar prosedur yang ada di database menggunakan:
SHOW PROCEDURE STATUS
WHERE Db = 'toko';Untuk melihat kode definisi suatu prosedur:
SHOW CREATE PROCEDURE tampilkan_barang;Perintah ini berguna ketika kamu ingin memeriksa isi prosedur tanpa membuatnya ulang.
19. START TRANSACTION, COMMIT, dan ROLLBACK dalam prosedur
Ketiga perintah ini berkaitan dengan transaksi database.
START TRANSACTION: memulai transaksi.COMMIT: mengesahkan perubahan.ROLLBACK: membatalkan perubahan yang belum disahkan.
Misalnya kamu ingin mengurangi stok barang sebanyak dua unit.
DELIMITER //
CREATE PROCEDURE kurangi_stok(
IN p_id INT,
IN p_jumlah INT
)
BEGIN
DECLARE v_stok INT DEFAULT NULL;
DECLARE EXIT HANDLER FOR SQLEXCEPTION
BEGIN
ROLLBACK;
RESIGNAL;
END;
IF p_jumlah <= 0 THEN
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'Jumlah harus lebih dari nol';
END IF;
START TRANSACTION;
SELECT stok INTO v_stok
FROM barang
WHERE id_barang = p_id
FOR UPDATE;
IF v_stok IS NULL THEN
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'Barang tidak ditemukan';
ELSEIF v_stok < p_jumlah THEN
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'Stok tidak mencukupi';
END IF;
UPDATE barang
SET stok = stok - p_jumlah
WHERE id_barang = p_id;
COMMIT;
END //
DELIMITER ;Jalankan:
CALL kurangi_stok(1, 2);Jika stok cukup, prosedur mengurangi stok dua unit. Jika barang tidak ditemukan atau stok tidak mencukupi, prosedur menghasilkan kesalahan dan perubahan transaksional dibatalkan.
Contoh ini mengasumsikan tabel menggunakan mesin transaksi seperti InnoDB. Prosedur yang mengelola transaksi juga perlu dirancang dengan memperhatikan apakah aplikasi pemanggil sudah mempunyai transaksi sendiri.
20. Perintah SQL lainnya yang bisa digunakan dalam prosedur
Selain perintah-perintah sebelumnya, ada beberapa perintah yang sering digunakan di dalam Stored Procedure.
Perintah | Fungsi |
|---|---|
| Mengisi atau mengubah nilai variabel |
| Membuat variabel lokal |
| Menyimpan hasil query ke variabel |
| Memeriksa kondisi |
| Memilih tindakan berdasarkan beberapa kondisi |
| Mengulang perintah selama kondisi benar |
| Mengulang sampai kondisi terpenuhi |
| Membuat perulangan |
| Keluar dari perulangan atau blok berlabel |
| Melanjutkan ke iterasi perulangan berikutnya |
| Menghasilkan kesalahan |
| Meneruskan kesalahan yang sedang ditangani |
| Memulai transaksi |
| Mengesahkan transaksi |
| Membatalkan transaksi yang belum disahkan |
Tidak semua prosedur membutuhkan seluruh perintah tersebut. Prosedur sederhana mungkin hanya berisi SELECT, sedangkan prosedur yang mengelola transaksi dapat memerlukan kondisi, variabel, dan penanganan kesalahan.
21. Cara membuat Stored Procedure di phpMyAdmin dan Laragon
Ikuti langkah-langkah berikut untuk mempraktikkan materi ini.
Langkah 1 — Jalankan Laragon
Buka Laragon, lalu klik Start All agar layanan database yang diperlukan berjalan.
Langkah 2 — Buka phpMyAdmin
Masuk ke phpMyAdmin melalui menu Laragon atau alamat lokal yang sudah dikonfigurasi.
Langkah 3 — Pilih database dan tab SQL
Pilih database toko, kemudian buka tab SQL.
Langkah 4 — Buat prosedur
Masukkan kode CREATE PROCEDURE, termasuk pengaturan DELIMITER jika editor mendukungnya, lalu jalankan.
Langkah 5 — Jalankan dan periksa hasil
Jalankan CALL tampilkan_barang();, lalu periksa hasilnya. Pada versi phpMyAdmin yang mendukungnya, prosedur juga dapat dilihat di bagian Routines/Rutinitas.
Jika DELIMITER ditolak oleh editor yang kamu gunakan, coba fitur pembuatan rutin pada phpMyAdmin atau gunakan klien MySQL/MariaDB yang mendukung perintah tersebut.
22. Contoh proyek mini: prosedur untuk database toko
Berikut rangkuman prosedur yang bisa kamu gunakan dalam proyek database toko.
1. Menampilkan barang
Menampilkan seluruh data barang.
2. Mencari barang
Mencari barang dengan ID tertentu.
3. Menambah barang
Menambahkan barang baru.
4. Mengubah harga
Mengubah harga barang dengan ID 1.
5. Menghapus barang
Menghapus barang dengan ID 2.
Nama prosedur di atas harus dibuat terlebih dahulu menggunakan kode pada bagian sebelumnya. Tombol salin hanya menyalin perintah untuk menjalankannya.
23. Kelebihan dan kekurangan prosedur
Kelebihan | Kekurangan |
|---|---|
Perintah dapat digunakan kembali | Memerlukan pemahaman sintaks prosedur |
Mengurangi query berulang | Kesalahan logika dapat memengaruhi data |
Mendukung parameter | Debugging bisa lebih sulit |
Dapat mengelompokkan banyak proses | Memerlukan dokumentasi dan pemeliharaan |
Mendukung pengaturan hak akses | Tidak semua logika aplikasi cocok ditempatkan di database |
Kesimpulan
Hal yang paling penting untuk kamu pahami adalah:
CREATE PROCEDUREuntuk membuat prosedur.CALLuntuk menjalankan prosedur.SELECTuntuk menampilkan data.INSERTuntuk menambahkan data.UPDATEuntuk mengubah data.DELETEuntuk menghapus baris.IN,OUT, danINOUTuntuk mengatur parameter.IF,ELSE, danWHILEuntuk logika dan perulangan.START TRANSACTION,COMMIT, danROLLBACKuntuk mengelola transaksi.DROP PROCEDUREuntuk menghapus prosedur.SHOW CREATE PROCEDUREuntuk melihat definisi prosedur.
Akun guardian tales
contoh prosedur dan 5 perintah utama di phpmyadmin
1.MEMBUAT PROSEDUR 2.CALL PROSEDUR A.LIMA PERINTAH UTAMA PROSEDUR 1.SELECT PROSEDUR 2.INSERT PROSEDUR 3.UPDATE PROSEDUR 4.DELETE PROSEDUR 5....





