Wednesday 27 November 2013

79. Iterative, Sequential Control pada PL-SQL

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