MySQL - Fungsi Simpan

Hai, para entusiast basis data yang sedang berkembang! Hari ini, kita akan masuk ke dunia yang menarik dari MySQL Fungsi Simpan. Sebagai guru komputer yang ramah di lingkungan sekitar Anda, saya sangat gembira untuk mengantar Anda dalam perjalanan ini, bahkan jika Anda belum pernah menulis baris kode sebelumnya. Jadi, ambil secangkir minuman favorit Anda, dan mari kita mulai!

MySQL - Stored Functions

Apa Itu MySQL Fungsi Simpan?

Imajinasikan Anda memiliki buku resep magis yang dapat secepatnya membuat makanan favorit Anda ketika Anda membutuhkannya. Itu seperti apa yang MySQL Fungsi Simpan untuk basis data! Mereka seperti resep yang sudah ditulis (atau fungsi) yang Anda bisa panggil saat Anda memerlukan untuk melakukan tugas tertentu dalam basis data Anda.

Mengapa Menggunakan Fungsi Simpan?

  1. Reusabilitas: Tulis sekali, gunakan banyak kali!
  2. Konsistensi: Memastikan logika yang sama diterapkan di mana-mana.
  3. Keamanan: Mengendalikan siapa yang bisa mengakses dan mengubah fungsi Anda.
  4. Kinerja: Mereka bisa lebih cepat daripada menulis kode yang sama berkali-kali.

Sekarang, mari kita lengan kencing dan buat fungsi simpan pertamamu!

Membuat Fungsi Simpan Pertama

Ini adalah contoh sederhana untuk memulai:

DELIMITER //

CREATE FUNCTION HelloWorld()
RETURNS VARCHAR(50)
DETERMINISTIC
BEGIN
RETURN 'Hello, World!';
END //

DELIMITER ;

mari kitauraikan ini:

  1. DELIMITER //: Ini memberitahu MySQL untuk menggunakan // sebagai pemisah pernyataan instead dari tanda koma (;) default. Kita melakukan ini karena fungsi kita mengandung tanda koma, dan kita tidak ingin MySQL bingung.

  2. CREATE FUNCTION HelloWorld(): Baris ini mendeklarasikan bahwa kita sedang membuat fungsi bernama "HelloWorld".

  3. RETURNS VARCHAR(50): Ini menentukan bahwa fungsi kita akan mengembalikan string (VARCHAR) hingga 50 karakter.

  4. DETERMINISTIC: Kata kunci ini memberitahu MySQL bahwa untuk input yang sama, fungsi akan selalu mengembalikan output yang sama.

  5. BEGIN dan END: Kata-kata ini membungkus tubuh fungsi kita.

  6. RETURN 'Hello, World!';: Ini adalah kode sebenarnya dari fungsi kita. Itu hanya mengembalikan string "Hello, World!".

  7. DELIMITER ;: Ini mengatur kembali pemisah default ke tanda koma.

Sekarang, mari kita panggil fungsi ini:

SELECT HelloWorld();

Dan voila! Anda harus melihat "Hello, World!" sebagai hasil. Selamat, Anda baru saja membuat dan memanggil fungsi simpan pertamamu!

Parameter dan Variabel dalam Fungsi Simpan

Marilah kita membuat hal ini lebih menarik dengan menambahkan parameter dan variabel ke fungsi kita.

DELIMITER //

CREATE FUNCTION Greet(name VARCHAR(50))
RETURNS VARCHAR(100)
DETERMINISTIC
BEGIN
DECLARE greeting VARCHAR(100);
SET greeting = CONCAT('Hello, ', name, '! Selamat datang ke fungsi MySQL!');
RETURN greeting;
END //

DELIMITER ;

Dalam contoh ini:

  1. Kita menambahkan parameter name VARCHAR(50) ke fungsi kita.
  2. Kita mendeklarasikan variabel greeting menggunakan kata kunci DECLARE.
  3. Kita menggunakan kata kunci SET untuk memberikan nilai ke variabel kita.
  4. Kita menggunakan fungsi CONCAT untuk menggabungkan string.

Marilah kita panggil fungsi ini:

SELECT Greet('Alice');

Ini seharusnya mengembalikan: "Hello, Alice! Selamat datang ke fungsi MySQL!"

Menggunakan Fungsi Simpan dengan Data Basis Data

Sekarang, marilah kita buat fungsi yang benar-benar berinteraksi dengan basis data kita. Bayangkan kita memiliki tabel employees dengan kolom id, first_name, last_name, dan salary.

DELIMITER //

CREATE FUNCTION CalculateBonus(employee_id INT)
RETURNS DECIMAL(10,2)
READS SQL DATA
BEGIN
DECLARE employee_salary DECIMAL(10,2);
DECLARE bonus DECIMAL(10,2);

SELECT salary INTO employee_salary
FROM employees
WHERE id = employee_id;

SET bonus = employee_salary * 0.1;

RETURN bonus;
END //

DELIMITER ;

Fungsi ini:

  1. Menerima employee_id sebagai masukan.
  2. Mendeklarasikan variabel employee_salary dan bonus.
  3. Mengambil gaji karyawan dari tabel employees.
  4. Menghitung bonus 10% berdasarkan gaji.
  5. Mengembalikan bonus yang dihitung.

Untuk menggunakan fungsi ini:

SELECT first_name, last_name, CalculateBonus(id) AS bonus
FROM employees
WHERE id = 1;

Ini akan mengembalikan nama depan, nama belakang, dan bonus yang dihitung untuk karyawan dengan id 1.

Aliran Kendali dalam Fungsi Simpan

Marilah kita meningkatkan perhitungan bonus kita dengan beberapa aliran kendali:

DELIMITER //

CREATE FUNCTION CalculateBonusTier(employee_id INT)
RETURNS VARCHAR(20)
READS SQL DATA
BEGIN
DECLARE employee_salary DECIMAL(10,2);
DECLARE bonus_tier VARCHAR(20);

SELECT salary INTO employee_salary
FROM employees
WHERE id = employee_id;

IF employee_salary < 30000 THEN
SET bonus_tier = 'Bronze';
ELSEIF employee_salary < 50000 THEN
SET bonus_tier = 'Silver';
ELSE
SET bonus_tier = 'Gold';
END IF;

RETURN bonus_tier;
END //

DELIMITER ;

Fungsi ini menggunakan IF, ELSEIF, dan ELSE untuk menentukan tingkat bonus berdasarkan gaji karyawan.

Memanggil Fungsi Simpan Dari Prosedur Simpan

Akhirnya, mari kita lihat bagaimana kita bisa menggunakan fungsi simpan dalam prosedur simpan:

DELIMITER //

CREATE PROCEDURE EmployeeBonusReport(IN emp_id INT)
BEGIN
DECLARE emp_name VARCHAR(100);
DECLARE emp_bonus DECIMAL(10,2);
DECLARE emp_bonus_tier VARCHAR(20);

SELECT CONCAT(first_name, ' ', last_name) INTO emp_name
FROM employees
WHERE id = emp_id;

SET emp_bonus = CalculateBonus(emp_id);
SET emp_bonus_tier = CalculateBonusTier(emp_id);

SELECT emp_name AS 'Employee Name',
emp_bonus AS 'Bonus Amount',
emp_bonus_tier AS 'Bonus Tier';
END //

DELIMITER ;

Prosedur ini:

  1. Menerima ID karyawan sebagai masukan.
  2. Mengambil nama lengkap karyawan.
  3. Memanggil fungsi CalculateBonus untuk mendapatkan jumlah bonus.
  4. Memanggil fungsi CalculateBonusTier untuk mendapatkan tingkat bonus.
  5. Mengembalikan laporan karyawan dengan nama, jumlah bonus, dan tingkat bonus.

Untuk memanggil prosedur ini:

CALL EmployeeBonusReport(1);

Dan itu adalah! Kita telah menutupi dasar-dasar MySQL Fungsi Simpan, dari pembuatan hingga penggunaan dalam prosedur simpan. Ingat, latihan membuat sempurna, jadi jangan khawatir untuk mencoba fungsi Anda sendiri. Selamat coding!

Credits: Image by storyset