11.2 Iterative
Control
Perintah-perintah LOOP
mengijinkan kita untuk mengeksekusi perintah-perintah hingga beberapa kali.
Kita meletakkan keyword LOOP sebelum perintah pertama di dalam rangkaian
perintah dan keyword END LOOP setelah perintah terakhir dalam rangkaian
perintah tersebut. Contoh berikut ini menunjukkan kepada kita bentuk loop
sederhana, dimana mengulang rangkaian perintah-perintah secara terus kontinyu:
LOOP
--
sequence of statements
END
LOOP;
Perintah-perintah
FOR-LOOP mengijinkan kita untuk menentukan jangkauan integer, lalu mengeksekusi
rangkaian perintah-perintah sekali untuk setiap integer di dalam jangkauan
tersebut. Sebagai contoh, loop berikut ini menambahkan 500 angka beserta nilai
kuadratnya ke dalam database table:
FOR
num IN 1..500 LOOP
INSERT
INTO roots VALUES (num, SQRT(num));
END
LOOP;
Perintah
WHILE-LOOP menghubungkan kondisi dengan rangkaian perintah-perintah. Sebelum
setiap perulangan di dalam loop, kondisi dievaluasi. Jika kondisi benar (true),
rangkaian perintah-perintah akan dieksekusi, lalu kontrol akan mulai lagi dari
puncak loop.
Jika kondisi salah (false) atau
null, loop dilewati dan kontrol menuju kepada perintah selanjutnya.
DECLARE
salary
emp.sal%TYPE := 0;
mgr_num
emp.mgr%TYPE;
last_name
emp.ename%TYPE;
starting_empno
emp.empno%TYPE := 7499;
BEGIN
SELECT
mgr INTO mgr_num
FROM
emp
WHERE
empno = starting_empno;
WHILE
salary <= 2500 LOOP
SELECT
sal, mgr, ename INTO salary, mgr_num, last_name
FROM
emp
WHERE
empno = mgr_num;
END
LOOP;
INSERT
INTO temp VALUES (NULL, salary, last_name);
COMMIT;
EXCEPTION
WHEN
NO_DATA_FOUND THEN
INSERT
INTO temp VALUES (NULL, NULL, 'Not found');
COMMIT;
END;
Perintah
EXIT-WHEN mengijinkan kita untuk menyelesaikan loop jika perintah selanjutnya
tidak mungkin atau tidak diinginkan. Ketika perintah EXIT ditemui, kondisi di
dalam klausa WHEN dievaluasi. Jika kondisi benar (true), loop diselesaikan dan
kontrol menuju kepada perintah selanjutnya. Di dalam contoh berikut ini, loop
diselesaikan ketika nilai dari total melampaui 25000.
LOOP
...
total
:= total + salary;
EXIT
WHEN total > 25000; -- exit loop if condition is true
END LOOP;
--
control resumes here
12.
Sequential
Control
Perintah
GOTO mengijinkan kita untuk mencabangkan label secara tidak terkondisi. Label,
identifier yang tidak terdeklarasikan, ditutup dengan tanda kurung persegi
ganda, harus mendahului perintah executable atau blok PL/SQL. Ketika
dieksekusi, perintah GOTO mentransfer kontrol kepada perintah atau blok
berlabel, seperti yang ditunjukkan oleh contoh berikut ini:
IF rating
> 90 THEN
GOTO
calc_raise; -- branch to label
END IF;
...
<>
IF
job_title = 'SALESMAN' THEN -- control resumes here
amount :=
commission * 0.25;
ELSE
amount :=
salary * 0.10;
END IF;
No comments:
Post a Comment