Stored Procedure

Stored Procedure (prosedur tersimpan) dalam SQL adalah sekumpulan perintah SQL yang dibungkus menjadi satu kesatuan, diberi nama, dan disimpan langsung di dalam server database. Konsepnya mirip fungsi (function) pada bahasa pemrograman: logikanya ditulis satu kali, lalu dipanggil kapan saja lewat namanya tanpa menulis ulang seluruh query dari awal.

Ringkasnya: kalau biasanya kamu mengetik perintah INSERT atau UPDATE panjang berulang kali dari aplikasi, dengan Stored Procedure kamu cukup membungkusnya di database dan memanggilnya dengan satu baris CALL nama_prosedur(...).



Kapan Stored Procedure Digunakan?

Stored procedure efektif untuk pengelolaan database aplikasi pada kondisi berikut:

  • Query yang berulang (repetitive tasks): aplikasi sering menjalankan operasi yang sama (menambah data paket baru, mencatat transaksi, mengambil laporan bulanan) dengan nilai input berbeda.
  • Menyimpan logika bisnis (business logic): satu aksi membutuhkan beberapa langkah sekaligus, misalnya mengecek paket, menambah jumlah pengguna di tabel paket, lalu mencatat riwayat pembelian di tabel lain.
  • Meningkatkan keamanan data: administrator dapat memberi izin menjalankan prosedur (EXECUTE) tanpa memberi akses langsung (SELECT, INSERT, UPDATE, DELETE) ke tabel aslinya.
  • Mengurangi beban jaringan: aplikasi cukup mengirim satu baris CALL beserta parameternya, bukan ratusan baris teks query.

Struktur Tabel Contoh: Tabel paket

Agar mudah dipahami, kita memakai tabel paket dengan ENGINE=InnoDB pada MySQL / MariaDB berikut:

SQL: struktur tabel paket
CREATE TABLE `paket` (
  `id_paket` varchar(50) NOT NULL,
  `nama_paket` varchar(200) NOT NULL,
  `harga_paket` int(11) DEFAULT NULL,
  `banyak_pengguna` int(11) DEFAULT NULL,
  PRIMARY KEY (`id_paket`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

Contoh Query Stored Procedure pada Tabel paket

Kita akan membuat prosedur tambah_paket_baru untuk memasukkan paket internet baru ke tabel paket, dengan nilai awal banyak_pengguna otomatis 0.

1. Membuat Stored Procedure (CREATE PROCEDURE)

SQL: membuat prosedur tambah_paket_baru
DELIMITER $$

CREATE PROCEDURE tambah_paket_baru (
    IN p_id_paket VARCHAR(50),
    IN p_nama_paket VARCHAR(200),
    IN p_harga_paket INT(11)
)
BEGIN
    INSERT INTO paket (id_paket, nama_paket, harga_paket, banyak_pengguna)
    VALUES (p_id_paket, p_nama_paket, p_harga_paket, 0);
END $$

DELIMITER ;

2. Memanggil / Menjalankan Stored Procedure (CALL)

Setelah prosedur tersimpan di database, panggil kapan saja dengan perintah CALL:

SQL: memanggil prosedur
CALL tambah_paket_baru('PKT-001', 'Paket Internet Hemat 50 Mbps', 250000);

Cara Membaca Query-nya (Bedah Baris demi Baris)

Bagi pemula, sintaks seperti DELIMITER $$ atau IN mungkin terlihat asing. Berikut arti setiap bagian kode di atas:

Bagian kode SQLCara baca & fungsinya
DELIMITER $$Mengubah tanda akhir perintah SQL sementara dari titik koma (;) menjadi $$, supaya MySQL tidak mengira titik koma di akhir baris INSERT sebagai akhir dari perintah pembuatan prosedur.
CREATE PROCEDURE tambah_paket_baru (...)Membuat prosedur baru bernama tambah_paket_baru. Tanda kurung berisi daftar parameter, yaitu data yang harus dikirim saat prosedur dipanggil.
IN p_id_paket VARCHAR(50)IN berarti parameter ini input (masukan dari luar). p_id_paket adalah nama variabel penampung (awalan p_ dipakai agar tidak tertukar dengan kolom asli id_paket), dan VARCHAR(50) adalah tipe datanya, disesuaikan dengan kolom tabel.
BEGIN ... END $$Pembuka dan penutup tubuh prosedur (seperti kurung kurawal { ... } di bahasa pemrograman). Semua perintah yang akan dijalankan diletakkan di antaranya.
INSERT INTO paket ... VALUES (..., 0);Isi utama prosedur. Mengambil nilai dari p_id_paket, p_nama_paket, dan p_harga_paket lalu memasukkannya ke tabel paket. Nilai banyak_pengguna diisi langsung 0.
DELIMITER ;Mengembalikan tanda akhir perintah SQL ke aturan normal, yaitu titik koma (;).
CALL tambah_paket_baru(...)Mengeksekusi prosedur. 'PKT-001' masuk ke p_id_paket, 'Paket Internet Hemat 50 Mbps' ke p_nama_paket, dan 250000 ke p_harga_paket.

Contoh Tambahan: Prosedur untuk Update Data

Selain menambah baris baru, prosedur juga sering dipakai untuk memperbarui data. Contohnya tambah_pengguna_paket, yang menambah jumlah pengguna setiap kali ada pelanggan baru berlangganan paket tertentu:

SQL: prosedur update tambah_pengguna_paket
DELIMITER $$

CREATE PROCEDURE tambah_pengguna_paket (
    IN p_id_paket VARCHAR(50),
    IN p_jumlah_baru INT(11)
)
BEGIN
    UPDATE paket
    SET banyak_pengguna = banyak_pengguna + p_jumlah_baru
    WHERE id_paket = p_id_paket;
END $$

DELIMITER ;

-- Cara memanggilnya (menambah 5 pengguna ke PKT-001):
CALL tambah_pengguna_paket('PKT-001', 5);

Tempat Praktik SQL Interaktif (tabel paket)

Ubah kode SQL sesukamu: buat prosedur baru, ubah nilai, atau panggil dengan CALL, lalu klik Jalankan Query SQL.

Simulasi di browser

Memuat playground... Jika bagian ini tidak berubah, aktifkan JavaScript atau muat ulang halaman. Isi artikel di atas tetap bisa dibaca.

1 komentar: