Pernah gak sih kalian ngerasa pegel ngetik query SQL yang panjang-panjang secara berulang kali tiap mau nampilin data? Aku juga gitu! Nah, kali ini aku mau share pengalaman nyobain fitur keren di MySQL yang namanya Stored Procedure.
Singkatnya, Stored Procedure itu kayak kita bikin shortcut (jalan pintas) buat query kita. Sekali dibikin kodenya, ke depannya kita tinggal panggil aja nama shortcut-nya. Praktis banget kan?
Kenalan Dulu Sama Database-nya
Biar nyambung, aku kasih tahu dulu struktur database yang aku pakai buat eksperimen ini. Namanya database rumah_sakit. Ada 6 tabel yang saling nyambung satu sama lain:
- poliklinik & dokter: Buat nyimpen data poli dan nama dokter spesialisnya.
- pasien: Buat biodata pasien.
- obat: Daftar obat sama sisa stoknya.
- rekam_medis: Ini tabel utamanya, nyatet waktu periksa sama diagnosa penyakit (nghubungin pasien dan dokter).
- detail_resep: Buat nyatet obat apa aja yang dikasih pas pasien selesai diperiksa.
Mulai bikin Procedure nya
Sebelum masuk ke kodenya, nanti kalian bakal sering nemu tulisan DELIMITER $$ di awal, dan DELIMITER ; di akhir. Ini tuh cuma trik sementara biar sistem MySQL gak salah paham pas baca tanda titik koma (;) di dalam kodingan kita. Anggap aja kayak ganti gigi perseneling bentar.
1. Procedure Buat Ngecek Obat Habis
Apoteker dan bagian Farmasi pasti butuh banget fitur ini buat ngecek obat apa aja yang stoknya udah 0 biar bisa buruan restock.
Kode nya:
DELIMITER $$
CREATE PROCEDURE `obat_habis`()
BEGIN
SELECT `id_obat`, `nama_obat`, `harga`, `stok`
FROM `obat`
WHERE `stok` = 0
ORDER BY `nama_obat` ASC;
END$$
DELIMITER ;
Penjelasan:
Ini yang paling simpel. Kita cuma narik data dari tabel obat yang stoknya bener-bener nol. Gak butuh masukin parameter apa-apa (makanya tanda kurungnya kosong).
Cara panggilnya: Tinggal jalanin CALL obat_habis();
2. Procedure Buat Nyari Dokter
Gimana kalau admin pendaftaran mau nyari dokter, tapi cuma inget sepenggal namanya doang? Kita bikin pencariannya!
Kodenya:
DELIMITER $$
CREATE PROCEDURE `cari_dokter`(IN `p_nama_dokter` VARCHAR(100))
BEGIN
SELECT d.`id_dokter`, d.`nama_dokter`, d.`spesialisasi`, p.`nama_poli`
FROM `dokter` d
LEFT JOIN `poliklinik` p ON d.`id_poli` = p.`id_poli`
WHERE d.`nama_dokter` LIKE CONCAT('%', `p_nama_dokter`, '%')
ORDER BY d.`nama_dokter` ASC;
END$$
DELIMITER ;
Penjelasan:
Nah, kalau ini kita pakai parameter input (IN). Terus, pake LEFT JOIN ke tabel poliklinik biar ketahuan dokternya tugas di poli mana. Pakai trik LIKE CONCAT bikin pencariannya jadi fleksibel, ketik huruf tengahnya doang juga bakal ketemu!
Cara panggilnya: Misal mau nyari dokter yang ada unsur nama "Budi": CALL cari_dokter('Budi');
3. Procedure Buat Kepoin Kunjungan Pasien
Buat keperluan laporan bulanan, kita biasanya butuh data pasien mana yang paling sering datang. Kita langsung bikin dua aja deh: satu buat rekap jumlahnya, satu lagi buat ngintip detail riwayatnya.
Kode buat Rekap Total:
DELIMITER $$
CREATE PROCEDURE `kunjungan_pasien`()
BEGIN
SELECT
p.`nama_pasien`, p.`alamat`,
COUNT(r.`id_rekam`) AS `total_kunjungan`,
MAX(r.`tanggal_periksa`) AS `kunjungan_terakhir`
FROM `pasien` p
LEFT JOIN `rekam_medis` r ON p.`id_pasien` = r.`id_pasien`
GROUP BY p.`id_pasien`, p.`nama_pasien`, p.`alamat`
ORDER BY `total_kunjungan` DESC;
END$$
DELIMITER ;
Penjelasan:
Kita pakai fitur COUNT buat ngitung total kedatangannya. Pakai LEFT JOIN sengaja dipilih biar pasien yang baru daftar dan belum pernah periksa tetep muncul dengan status kunjungan "0".
Kode buat Cek Detail Riwayatnya:
DELIMITER $$
CREATE PROCEDURE `riwayat_kunjungan(IN `p_nama_pasien` VARCHAR(100))
BEGIN
SELECT
p.`nama_pasien`, r.`tanggal_periksa`,
d.`nama_dokter`, pol.`nama_poli`, r.`diagnosa`
FROM `rekam_medis` r
JOIN `pasien` p ON r.`id_pasien` = p.`id_pasien`
JOIN `dokter` d ON r.`id_dokter` = d.`id_dokter`
LEFT JOIN `poliklinik` pol ON d.`id_poli` = pol.`id_poli`
WHERE p.`nama_pasien` LIKE CONCAT('%', `p_nama_pasien`, '%')
ORDER BY r.`tanggal_periksa` DESC;
END$$
DELIMITER ;
Penjelasan:
Kelihatan ribet ya ada banyak JOIN? Padahal intinya cuma nerjemahin angka ID di tabel rekam medis biar berubah jadi nama orang (pasien dan dokter) yang bisa dibaca.
Cara panggilnya:
- Lihat rekap: CALL kunjungan_pasien();
- Lihat riwayat si Citra: CALL riwayat_kunjungan('Citra');