Awal pembahasan dari Mengenal
Pemrograman Stored Procedure Pada MySQL lanjut ke pembahasan
Struktur Kontrol Program Pada MySQL.
Sebelumnya saya sarankan bagi
pembaca untuk memahami dasar program yang sudah saya jelaskan dalam
artikel sebelumnya yan berjudul Mengenal Pemrograman Stored
Procedure Pada MySQL.
Cekidot…. !!!
MySQL meyediakan pernyataan
IF, CASE, ITERATE, LEAVE LOOP, WHILE, dan REPEAT untuk mengatur alur
kontrol program di dalam stored program.
#.#
IF . . . ELSE . . .
Digunakan untuk mengeksekusi
satu blok perintah bila suatu kondisi tertentu terpenuhi. Struktur IF
… ini sedikit berbeda dengan bahasa program lainnya.
Syntax
IF
search_condition
THEN
statement_list
[ELSEIF
search_condition
THEN
statement_list]
[ELSE
statement_list]
END IF
search_condition
adalah
expression yang menghasilkan nilai True dan False. Jika berisi
perintah SELECT, maka perintah SELECT tersebut harus ditulis di
dalam tanda kurung.
statement_list
berisi
perintah SQL, atau satu blok perintah SQL yang ditandai dengan BEGIN
… END atau blok perintah yang ditandai kata THEN dan sampai ketemu
kata ELSE atau END IF.
IF ...END IF adalah satu
blok,sama seperti blok struktur kontrol lainnya pada stored program,
struktur ini harus diahkiri dengan tanda titik koma.
Contoh:
CREATE FUCTION Predikat (n
INT) RETURNS VARCHAR (10)
BEGIN
DECLARE S VARCHAR (10);
IF n >= 15000 Then
set S = ‘Sangat baik’;
ELSEIF n > 10000 Then
set S = ‘Baik’;
ELSEIF n > 7500 Then
set S = ‘Cukup’;
ELSE
set S = ‘Kurang’;
END IF;
RETURN s;
END $$
Sama seperti struktur kontrol
pada bahasa pemrograman lainnya, struktur blok IF … END IF bisa
bersarang atau ada struktur IF . . . END IF. Masing-masing harus
diakhiri huruf titik koma.
Contoh:
CREATE FUCTION Banding (n
INT, m INT) RETURNS VARCHAR (50)
BEGIN
DECLARE s VARCHAR (50);
IF n = m THEN
SET s = ‘sama dengan’;
ELSE
IF n > m THEN
SET s = ‘lebih besar’;
ELSE
SET s = ‘lebih kecil’;
END IF;
SET s = CONCAT (‘adalah
‘, s, ‘ dari ‘);
END IF;
SET s = CONCAT (n, ‘ ‘,
s, ‘ ‘, m, ‘ . ‘);
RETURN s;
END $$
Bentuk lain dari strutur IF
yang digunakan di dalam pernyataan SQL adalah
IF (expr1, expr2,
expr3)
Jika expr1 bernilai
TRUE (expr1<> 0 dan expr1 <> NULL) maka
IF() menghasilkan expr2; jika tidak maka IF() akan
menghasilkan expr3.
Contoh:
mysql> SELECT IF (1<2,
‘ya’ , ‘tidak’);
#.# CASE
Fungsi case menghasilkan satu
return value, digunakan bila ada banyak kondisi untuk dievaluasi.
Value mana yang dihasilkan bergantung pada kondisi yang menghasilkan
nilai True. Ada 2 bentuk CASE:
-
Simpel CASE
CASE
case_value
WHEN
when_value THEN
statemen_list
[WHEN
when_value THEN
statement_list]
. . .
[ELSE
statement_list]
END CASE
case_value adalah
variabel yang akan diperiksa, when_value konstata
pembanding atau kondisi yang harus dipenuhi, dan statement_list
adalah konstanta atau perintah
SQL yang akan dikerjakan bila kondisi terpenuhi.
Contoh :
CREATE FUCTION TA
( GAJI_POKOK DECIMAL,
ANAK TINYINT )
RETURNS DECIMAL
BEGIN
DECLARE T DECIMAL;
CASE ANAK
WHEN 1 THEN SET T = 0.1 *
GAJI_POKOK;
WHEN 2 THEN SET T = 0.2 *
GAJI_POKOK;
WHEN 3 TEHN SET T = 0.25 *
GAJI_POKOK;
ELSE SET T = 0;
END CASE;
RETURN T;
END $$
-
Searched CASE
CASE
WHEN search_condition
THEN
statemen_list
[ WHEN search_condition
THEN
statement_list] . . .
[ELSE
statement_list]
END CASE
Pada bentuk CASE ini,
statement_list mana yang akan dikerjakan bergantung pada
search_condition mana yang menghasilkan True.
Contoh
:
CREATE FUCTION HURUF (NILAI
TINYINT)
RETURN CAHR ( 1 )
BEGIN
DECLARE C CHAR ( 1 );
CASE
WHEN NILAI >= 90 THEN SET
C= ‘A’;
WHEN NILAI >= 70 THEN SET
C= ‘B’;
WHEN NILAI >= 60 THEN SET
C= ‘C’;
WHEN NILAI >= 50 THEN SET
C= ‘D’;
ELSE SET C=’E’;
END CASE;
RETURN C;
END $$
Struktur kontrol CASE juga
bisa digunakan dalam pernyataan SELECT
Contoh
:
SELECT
f.judul, f.harga, k,kelompok
CASE
WHEN harga IS NULL THEN
‘Maaf, harga belum ditetapkan’
WHEN harga < 10000 THEN
‘Murah’
WHEN harga < 50000 THEN
‘Cukup Murah’
WHEN harga = 50000 THEN ‘
Harga Pas’
WHEN harga < 60000 THEN
‘Cukup Mahal’
WHEN
harga >= 60000 and harga < 100000 THEN ‘Mahal juga ya’
ELSE ‘Mahal Sekali!’
END AS Keterangan
FROM Film f
INNER JOIN KelompokFilm k ON
f.KodeKelompok = k.KodeKelompok
Order By f.Judul
#.#
LEAVE
Pernyataan LEAVE label
digunakan untuk keluar dari struktur kontrol yang ber-label.
Pernyataan ini dapat digunakan pada struktur BEGIN … END dan
struktur loop (LOOP, REPEAT, dan WHILE).
Pernyataan LAVE harus diikuti
dengan label. Jika label yang mengikutinya adalah blok terluar
atau struktur loop terluar, berarti program selesai. Hal ini bisa
kita manfaatkan untuk mengakhiri stored procedure dari tengah kode
program.
Syntax
LEAVE
label
Contoh
:
CREATE PROCEDURE TesProc()
BEGIN
DECLARE I int;
SET i=l ;
ulang; LOOP
SET i=i+l;
IF i=10 THEN
LEAVE
ulang #
keluar dari blok ulang (pengulangan)
END IF;
END LOOP ulang;
SELECT ‘Hitungan sampai
10’;
END $$
Pada stored function, dengan
pernyataan RETURN kita bisa keluar mengakhiri stored function dari
mana saja, tetapi tidak dengan stored procedure. Untuk itu kita bisa
menggunakan LEAVE untuk keluar dari stored procedure.
Contoh
:
CREATE PROCEDURE TesProc(xKode
INT)
SP_Ini; BEGIN
DECLARE a, b INT;
DECLARE done INT DEFAULT
FALSE;
DECLARE curl CURSOR FOR
SELECT id, data FROM
test.tl Where Kode=xKode;
DECLARE CONTINUE HANDLER FOR
NOT FOUND SET done = TRUE;
IF
Value is null or Value=0 then
LEAVE SP_Ini;
END IF;
OPEN curl;
loop_baca; LOOP
FETCH curl INTO a, b;
IF done THEN
LEAVE loop_baca;
END IF;
IF b < c
INSERT INTO test.t3 VALUES
(a, b);
END IF;
END LOOP;
CLOSE curl;
END;
#.#
LOOP
LOOP adalah bentuk pengulangan
yang sederhana, digunakan untuk mengulangi pengerjaan suatu blok yang
berisi pernyataan SQL. Bentuk struktur kontrol ini tidak memiliki
syarat atau kondisi agar pengulangan berhenti, sehingga di dalam blok
pengulangan diberi struktur IF dan LEAVE agar pengulangan bisa
berhenti.
Syntax
[begin_label;]
LOOP
statement_list
END
LOOP [end_label]
Contoh
:
CREATE FUNCTION FACTORIAL (N
TINYINT)
RETURN INT
BEGIN
DECLARE H, I INT;
SET I = 1, H = 1;
hitung; LOOP
SET H=H*I;
SET I = I + 1;
IF I>N THEN
LEAVE hitung;
END IF;
END LOOP;
RETURN H;
END
#.#
ITERATE
Digunakan untuk mengabaikan
semua pernyataan sesudah ITERATE dan melompat kembali ke awal blok
pengulangan. Perintah ini hanya bisa digunakan pada struktur
pengulangan LOOP, REPEAT, dan WHILE.
Syntax
ITERATE label
Contoh
:
CREATE PROCEDURE ulang (p1
INT)
BEGIN
labell: LOOP
SET p1 = p1 + 1;
IF p1 < 10 THEN
ITERATE labell;
END IF;
LEAVE labell;
END LOOP labell;
SET @x = p1;
END
#.#
REPEAT
Perintah ini digunakan untuk
mengulang pengerjaan suatu blok perintah SQL selama suatu kondisi
tertentu atau sampai suatu kondisi tertentu tercapai. Pada bentuk ini
pemeriksaan kondisi dilakukan di akhir pengulangan, sehingga minimal
blok pengulangan dikerjakan satu kali.
Syntax
[begin_label
:] REPEAT
statement_list
UNTIL
search_condition
END
REPEAT [end_label]
Contoh
:
CREATE PROCEDURE ulangi (p1
INT)
BRGIN
SET @x = 0;
REPEAT
SET @x = @x + 1;
UNTIL @x > p1 END REPEAT;
END
#.#
WHILE
Perintah ini digunakan untuk
mengulang pengerjaan suatu blok perintah SQL selama suatu kondisi
tertentu atau sampai suatu kondisi tertentu tercapai. Pada bentuk ini
pemeriksaan kondisi dilakukan di awal pengulangan, sehingga ada
kemungkinan blok pengulangan tidak dikerjakan.
Syntax
[begin_label]
WHILE search_condition DO
statement_list
END
WHILE [end_label]
“search_condition”
Adalah
kondisi supaya proses pengulangan dikerjakan, berupa expression yang
menghasilkan boolean, True atau False. Jika boolean
expression berisi
perintah SELECT, maka perintah SELECT tersebut harus ditulis di dalam
tanda kurung. Pengulangan akan dikerjakan selama search_condition
menghasilkan nilai TRUE.
“statement_list”
Berisi satu perintah SQL atau
satu blok SQL yang ditandai dengan BEGIN . . . END.
Contoh
:
Ulang:WHILE (SELECT AVG(price)
FROM titles) < 30 DO
BEGIN
UPDATE titles SET price =
price * 2;
SELECT MAX (price) FROM
titles;
IF (SELECT MAX(price) FROM
titles) > 50 Then
LEAVE ulang;
END IF;
END
#.#
RETURN
Digunakan untuk memaksa keluar
dari stored function, kembali ke pemanggil dan mengirimkan expression
sebagai return value ke pemanggil.
Syntax
RETURN
expression
Contoh
:
DECLARE ERRNUMBER INT
Set ERRNUMBER = ERROR
If ERRNUMBER <> 0 THEN
Begin
Rollback Tran
RETURN ERRNUMBER
End
Mungkin cukup itu yang bisa saya sampaikan dalam pemrogaman MySQL. Tunggu sesi selanjutnya dalam pemrograman MySQL.
Semoga bermanfaat bagi kalian yang membaca artikel saya :)
Follow Us
Were this world an endless plain, and by sailing eastward we could for ever reach new distances