Store Program MySQL
3.10 Kontrol Bersyarat
Dodit Suprianto: “Pemrograman Database Dengan MySQL Dan Visual Basic .NET/2005/2008”. 111
mysql> CALL BLOK_BERULANG4_SP();
+---+
| Akhir program | +---+
| Akhir program | +---+
1 row in set (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Dodit Suprianto: “Pemrograman Database Dengan MySQL Dan Visual Basic .NET/2005/2008”. 112
3.10.1.1 Kombinasi IF-THEN
Pernyataan IF-THEN akan menjalankan perintah berikutnya jika kondisi ekspresi bernilai TRUE
IF ekspresi THEN
Perintah/pernyataan END IF;
Contoh IF-THEN sederhana yang menjalankan satu pernyataan:
IF harga_jual > 25000 THEN
CALL buku_discount(kode_buku, 10);
END IF;
Contoh pernyataan IF-THEN yang menjalankan lebih dari satu pernyataan jika IF bernilai benar:
IF harga_jual > 25000 THEN
CALL buku_discount(kode_buku, 10);
SELECT * FROM buku_tb WHERE kode_buku = '9789792075830';
END IF;
Contoh pernyataan IF-THEN berulang:
IF harga_jual > 25000 THEN
CALL buku_discount(kode_buku, 10);
IF harga_jual > 35000 THEN
CALL buku_discount(kode_buku, 5);
END IF;
END IF;
3.10.1.2 Pernyataan IF-THEN-ELSE
Penambahan kondisi ELSE pada pernyataan IF mengizinkan Anda untuk menentukan pernyataan baru jika eksekusi kondisi IF bernilai tidak TRUE (tidak TRUE tidak selalui bernilai FALSE, bisa jadi bernilai NULL).
Blok sintaks IF-THEN-ELSE adalah:
Dodit Suprianto: “Pemrograman Database Dengan MySQL Dan Visual Basic .NET/2005/2008”. 113
IF ekspresi THEN
Pernyataan dilaksanakan jika ekspresi bernilai TRUE ELSE
Pernyataan dilaksanakan jika ekspresi bernilai FALSE atau NULL END IF;
Contoh penggunaan IF-THEN-ELSE sederhana:
IF harga_jual < 25000 THEN
CALL buku_discount(kode_buku, 10);
ELSE
CALL buku_discount(kode_buku, 15);
END IF;
3.10.1.3 Pernyataan IF-THEN-ELSEIF-ELSE
Sintaks pernyataan IF yang lengkap mengizinkan Anda untuk menetapkan kondisi lebih dari satu. Kondisi pertama dijalankan jika hasil evaluasi bernilai TRUE. Jika tidak bernilai TRUE (False, Null), maka klausa ELSE (jika ada) akan dijalankan. Contoh blok IF-THEN-ELSEIF-ELSE adalah sebagai berikut (kondisi ELSEIF dapat ditambah sesuai kebutuhan):
IF ekspresi THEN
Pernyataan dilaksanakan jika ekspresi bernilai TRUE ELSEIF ekspresi1 THEN
Pernyataan dilaksanakan jika ekspresi1 bernilai TRUE ELSE
Pernyataan dilaksanakan jika seluruh ekspresi sebelumnya bernilai FALSE atau NULL
END IF;
Contoh blok IF-ELSEIF :
IF (harga_jual > 45000) THEN
CALL buku_discount(kode_buku, 10);
ELSEIF (harga_jual>45000 AND kode_buku='9789792075830') THEN CALL buku_discount(kode_buku, 15);
SELECT * FROM buku_tb WHERE kode_buku='9789792075830' END IF;
Contoh blok IF-ELSEIF dengan banyak kondisi:
IF (harga_jual > 45000) THEN
CALL buku_discount(kode_buku, 10);
Dodit Suprianto: “Pemrograman Database Dengan MySQL Dan Visual Basic .NET/2005/2008”. 114
ELSEIF (harga_jual > 45000 AND kode_buku='9789792075830') THEN CALL buku_discount(kode_buku, 15);
SELECT * FROM buku_tb WHERE kode_buku='9789792075830' ELSEIF (harga_jual > 45000 AND kode_buku='9789792405569') THEN
CALL buku_discount(kode_buku, 15);
SELECT * FROM buku_tb WHERE kode_buku='9789792405569' ELSEIF (harga_jual > 45000 AND kode_buku='9789793338125') THEN
CALL buku_discount(kode_buku, 15);
SELECT * FROM buku_tb WHERE kode_buku='9789793338125' END IF;
3.10.2 Pernyataan CASE
Pernyataan CASE merupakan alternatif dari pernyataan kondisi IF, namun CASE lebih mudah dibaca dan efesien ketika banyak kondisi membutuhkan evaluasi (pengecekkan) terutama ketika semua kondisi membandingkan suatu nilai yang berasal dari satu ekspresi.
3.10.2.1 Pernyataan CASE Sederhana
Pernyataan CASE mempunyai dua bentuk. Pertama, disebut sebagai pernyataan CASE sederhana yang membandingkan nilai ekspresi dengan banyak kondisi:
CASE ekspresi WHEN nilai THEN
pernyataan [WHEN nilai THEN
pernyataan ...]
[ELSE
pernyataan]
END CASE;
Contoh, kita akan melaksanan pernyataan INSERT jika ekspresi pilihan=
‘INSERT’, melaksanakan pernyataan UPDATE jika ekspresi pilihan=’UPDATE’ dan melaksanakan pernyataan DELETE jika ekspresi pilihan=’DELETE’.
CASE pilihan
WHEN 'INSERT' THEN
Dodit Suprianto: “Pemrograman Database Dengan MySQL Dan Visual Basic .NET/2005/2008”. 115
INSERT INTO penulis_tb (kode_penulis, nama_penulis, email, website, tentang_penulis)
VALUES (vkode_penulis, vnama_penulis, vemail, vwebsite, vtentang_penulis);
WHEN 'UPDATE' THEN UPDATE penulis_tb
SET nama_penulis=vnama_penulis, email=vemail, website=vwebsite, tentang_penulis=vtentang_penulis
WHERE kode_penulis = vkode_penulis;
WHEN 'DELETE' THEN
DELETE FROM penulis_tb
WHERE kode_penulis = vkode_penulis;
END CASE;
Sama dengan perintah IF Anda dapat menetapkan banyak pernyataan WHEN. Anda dapat menambahkan klausa ELSE yang akan dilaksanakan pernyataan-pernyataannya jika tidak ada satu ekspresi dan nilai kondisi yang memenuhi syarat.
Catatan: Pernyataan CASE akan menampilkan pesan kesalahan jika tak satu pun dari kondisi yang ada memenuhi syarat. Alangkah baiknya jika pernyataan ELSE dicantumkan saat kondisi tidak terpenuhi. Adapun pesan kesalahannya adalah: “ERROR 1339 (20000): Case not found for CASE statement”
3.10.2.2 Pernyataan CASE Dengan Kondisi
Pernyataan CASE dengan kondisi secara fungsional serupa dengan blok IF- ELSEIF-ELSE-END IF. Sintaks CASE kondisi:
CASE
WHEN kondisi THEN pernyataan [WHEN kondisi THEN
pernyataan...]
[ELSE
pernyataan]
END CASE;
Contoh CASE dengan kondisi:
Dodit Suprianto: “Pemrograman Database Dengan MySQL Dan Visual Basic .NET/2005/2008”. 116
CASE
WHEN (harga_jual > 45000 AND kode_buku='9789792075830') THEN SELECT * FROM buku_tb WHERE kode_buku='9789792075830';
WHEN (harga_jual > 45000 AND kode_buku='9789792405569') THEN SELECT * FROM buku_tb WHERE kode_buku='9789792405569';
WHEN (harga_jual > 45000 AND kode_buku='9789793338125') THEN SELECT * FROM buku_tb WHERE kode_buku='9789793338125';
END CASE;
Untuk mencegah kesalahan ketika kondisi tidak terpenuhi maka tambahkan pernyataan ELSE seperti contoh berikut ini:
CASE
WHEN (harga_jual > 45000 AND kode_buku='9789792075830') THEN SELECT * FROM buku_tb WHERE kode_buku='9789792075830';
WHEN (harga_jual > 45000 AND kode_buku='9789792405569') THEN SELECT * FROM buku_tb WHERE kode_buku='9789792405569';
WHEN (harga_jual > 45000 AND kode_buku='9789793338125') THEN SELECT * FROM buku_tb WHERE kode_buku='9789793338125';
ELSE
SELECT 'Data tidak ditemukan';
END CASE;
Contoh penggunaan CASE berulang dengan lingkup blok penanganan kesalahan “error 1339” yang berarti tidak satupun kondisi terpenuhi.
BEGIN
DECLARE not_found INT DEFAULT 0;
DECLARE CONTINUE HANDLER FOR 1339 SET not_found=1;
CASE
WHEN (harga_jual > 45000 AND kode_buku='9789792075830') THEN SELECT * FROM buku_tb WHERE kode_buku='9789792075830';
WHEN (harga_jual > 45000 AND kode_buku='9789792405569') THEN SELECT * FROM buku_tb WHERE kode_buku='9789792405569';
WHEN (harga_jual > 45000 AND kode_buku='9789793338125') THEN SELECT * FROM buku_tb WHERE kode_buku='9789793338125';
END CASE;
END;