DECLARE
ctr INTEGER;
...
BEGIN
...
FOR ctr IN 1..25 LOOP
...
IF main.ctr > 10 THEN --глобал ўзгарувчига мурожаат
...
END IF;
END LOOP;
END main;
Айнан шу қоидалар ичма-ич жойлашган цикллар учун ҳам ўринлидир:
<
FOR step IN 1..25 LOOP
FOR step IN 1..10 LOOP
...
IF outer.step > 15 THEN ...
END LOOP;
END LOOP outer;
EXIT жумласидан фойдаланиш
Цикл жараёнини дарҳол бузиш учун EXIT жумласидан фойдаланиш мумкин:
FOR j IN 1..10 LOOP
FETCH c1 INTO emp_rec;
EXIT WHEN c1%NOTFOUND;
...
END LOOP;
EXIT жумласи орқали ичма-ич жойлашган цикллардан ҳам чиқиш имконияти мавжуд:
<
FOR i IN 1..5 LOOP
...
FOR j IN 1..10 LOOP
FETCH c1 INTO emp_rec;
EXIT outer WHEN c1%NOTFOUND;--иккала циклдан чиқади
...
END LOOP;
END LOOP outer;
-- бошқарув шу ерга узатилади.
Кетма-кет бошқарув: GOTO ва NULL жумлалари
GOTO жумласи
GOTO жумласи меткаланган бўлимга шартсиз равишда ўтиш учун ишлатилади:
Мисол 1.
BEGIN
...
GOTO insert_row;
...
<
INSERT INTO emp VALUES ...
END;
Мисол 2.
BEGIN
...
<
BEGIN
UPDATE emp SET ...
...
END;
...
GOTO update_row;
...
END;
Мисол 3.
DECLARE
done BOOLEAN;
BEGIN
...
FOR i IN 1..50 LOOP
IF done THEN
GOTO end_loop;
END IF;
...
<
END LOOP; -- бажарилмайдиган жумла
END;
Мисол 4.
FOR i IN 1..50 LOOP
IF done THEN
GOTO end_loop;
END IF;
...
<
NULL; -- бажариладиган жумла
END LOOP;
Мисол 5.
DECLARE
my_ename CHAR(10);
BEGIN
<
SELECT ename INTO my_ename FROM emp WHERE ...
BEGIN
...
GOTO get_name;
END;
END;