Store Procedure - Basit Al Fath

Senin, 20 April 2026

Store Procedure

Definisi: Stored Procedure adalah sekumpulan perintah SQL yang disimpan di dalam database dan dapat dipanggil kembali kapan saja dibutuhkan.

  1. Disimpan permanen di dalam server database, bukan di aplikasi.
  2. Cukup dibuat sekali, bisa dipanggil berkali-kali dari mana saja.
  3. Dieksekusi langsung di server, mengurangi beban jaringan.


Mengapa Harus Pakai Stored Procedure?

keamanan : User tidak perlu akses langsung ke tabel. Hanya bisa akses melalui procedure yang sudah ditentukan.

Performa Lebih Cepat : SQL dicompile sekali dan disimpan. Eksekusi berikutnya jauh lebih cepat dibanding mengirim ulang query.

Mengurangi Traffic Jaringan : Hanya nama procedure dan parameter yang dikirim, bukan seluruh query panjang.


Skenario: Kasir ingin melihat semua varian & harga dari satu jenis alat musik (misal: Gitar).

DELIMITER $$

CREATE PROCEDURE

  cari_varian_alat(

    IN p_nama_alat VARCHAR(100))

BEGIN

  SELECT

    am.nama_alat,

    v.nama_varian,

    v.harga,

    v.stok

  FROM tb_varian_alat_musik v

  JOIN tb_alat_musik am

    ON v.id_alat_musik = am.id

  WHERE am.nama_alat

    LIKE CONCAT('%', p_nama_alat, '%');

END$$

DELIMITER ;



CALL cari_varian_alat('Gitar');


-------------


Skenario: Manajer ingin tahu berapa total transaksi yang sudah ditangani oleh seorang pegawai berdasarkan ID-nya

DELIMITER $$


CREATE PROCEDURE

  total_transaksi_pegawai(

    IN  p_id_pegawai INT,

    OUT p_total      INT)

BEGIN

  SELECT COUNT(*)

  INTO p_total

  FROM tb_header_transaksi

  WHERE id_pegawai = p_id_pegawai;

END$$


DELIMITER ;


-- Memanggil:

CALL total_transaksi_pegawai(2, @hasil);

SELECT @hasil AS total_transaksi;


------


Skenario: Hitung total pendapatan (harga × qty) dari semua transaksi di sebuah cabang berdasarkan ID cabang.


DELIMITER $$


CREATE PROCEDURE

  pendapatan_cabang(

    IN  p_id_cabang  INT,

    OUT p_pendapatan DECIMAL(15,2))

BEGIN

  SELECT SUM(v.harga * dt.qty)

  INTO p_pendapatan

  FROM tb_detail_transaksi dt

  JOIN tb_header_transaksi ht

    ON dt.id_transaksi = ht.id

  JOIN tb_pegawai pg

    ON ht.id_pegawai = pg.id

  JOIN tb_varian_alat_musik v

    ON dt.id_varian_alat_musik = v.id

  WHERE pg.id_cabang = p_id_cabang;

END$$


DELIMITER ;



CALL pendapatan_cabang(1, @hasil);  SELECT @hasil;



----------

Latihan


Buat SP cari_pegawai_cabang dengan parameter IN id_cabang. Tampilkan nama_pegawai dan gaji semua pegawai di cabang tersebut.


DELIMITER $$


CREATE PROCEDURE cari_pegawai_cabang(IN p_id_cabang INT)

BEGIN

    SELECT 

        nama_pegawai,

        gaji

    FROM tb_pegawai

    WHERE id_cabang = p_id_cabang;

END$$


DELIMITER ;


-- Cara memanggil:

CALL cari_pegawai_cabang(1);



-------

Buat SP stok_varian dengan parameter IN id_varian dan OUT p_stok. Kembalikan jumlah stok dari varian alat musik tersebut.


DELIMITER $$


CREATE PROCEDURE stok_varian(

    IN  p_id_varian INT,

    OUT p_stok      INT

)

BEGIN

    SELECT stok

    INTO p_stok

    FROM tb_varian_alat_musik

    WHERE id = p_id_varian;

END$$


DELIMITER ;


-- Cara memanggil:

CALL stok_varian(2, @hasil_stok);

SELECT @hasil_stok AS stok_tersedia;


-------

sp untuk insert tb_cabang

DELIMITER $$

CREATE PROCEDURE insert_cabang(
    IN p_nama_cabang VARCHAR(100),
    IN p_alamat      TEXT,
    IN p_telepon     VARCHAR(20)
)
BEGIN
    INSERT INTO tb_cabang (
        nama_cabang,
        alamat,
        telepon
    )
    VALUES (
        p_nama_cabang,
        p_alamat,
        p_telepon
    );
END$$

DELIMITER ;

-- Cara memanggil:
CALL insert_cabang(
    'Cabang Cirebon',       -- nama_cabang
    'Jl. Asia Afrika No.20', -- alamat
    '022-12345678'          -- telepon
);






Comments


EmoticonEmoticon