Stored Procedures vs Functions
Stored procedures dan functions adalah kode SQL yang disimpan di database dan bisa dipanggil berulang kali.
Function (mengembalikan nilai)
-- Function: menghitung diskon berdasarkan total
CREATE OR REPLACE FUNCTION hitung_diskon(total DECIMAL)
RETURNS DECIMAL AS $
BEGIN
IF total >= 1000000 THEN
RETURN total * 0.10; -- diskon 10%
ELSIF total >= 500000 THEN
RETURN total * 0.05; -- diskon 5%
ELSE
RETURN 0;
END IF;
END;
$ LANGUAGE plpgsql;
-- Penggunaan
SELECT hitung_diskon(1500000); -- 150000
SELECT total, hitung_diskon(total) AS diskon FROM orders;
Stored Procedure (menjalankan operasi)
-- Procedure: transfer uang antar akun
CREATE OR REPLACE PROCEDURE transfer_uang(
dari INT,
ke INT,
jumlah DECIMAL
)
LANGUAGE plpgsql AS $
BEGIN
-- Kurangi dari pengirim
UPDATE accounts SET balance = balance - jumlah WHERE id = dari;
-- Cek saldo tidak negatif
IF (SELECT balance FROM accounts WHERE id = dari) < 0 THEN
RAISE EXCEPTION 'Saldo tidak cukup';
END IF;
-- Tambah ke penerima
UPDATE accounts SET balance = balance + jumlah WHERE id = ke;
END;
$;
-- Penggunaan
CALL transfer_uang(1, 2, 500000);
Perbedaan Utama
- Function — return value, bisa dipakai di SELECT, immutable/stable
- Procedure — tidak return value, bisa COMMIT/ROLLBACK, untuk operasi
Kapan Menggunakan?
- Logika yang sering dipakai di banyak query
- Operasi kompleks yang harus atomic
- Validasi data di level database
Pertimbangan
- Pro: Performa (eksekusi di server, kurangi network roundtrip)
- Con: Sulit di-test, tidak ada version control, vendor lock-in
- Kebanyakan aplikasi modern menaruh logika di application layer, bukan di database