|
Příkaz CASE | Řídící příkazy | Příkaz WHILE |
příkaz_LOOP ::= [ návěští : ] LOOP příkaz … END LOOP [ návěští ];
Příkazy (resp. složené příkazy) obsažené v příkazu LOOP se provádějí opakovaně, dokud se neprovede příkaz LEAVE nebo dokud nedojde k chybě.
Je-li uvedeno koncové návěští, pak musí být uvedeno také stejné počáteční návěští. Uvnitř příkazu LOOP nesmí být žádný příkaz označen stejným návěštím.
Velmi časté použití nachází LOOP při procházení záznamů kurzoru otevřeného příkazem OPEN (prakticky jediná možnost, jak lze tyto záznamy projít). K průchodu všemi záznamy kurzoru lze také použít příkaz FOR.
Příklad použití:
do tabulky vložit 10 záznamů a vzestupně je očíslovat
BEGIN ATOMIC
DECLARE i INT;
SET i = 1;
label: LOOP INSERT INTO Tab3 (cislo) VALUES (i);
IF i >= 10 THEN LEAVE label; END IF;
SET i = i + 1;
END LOOP label;
END;
Příklad použití č. 2:
použití LOOP při procházení kurzoru:
PROCEDURE ZmenaCeniku();
BEGIN
DECLARE err_notfound BIT DEFAULT FALSE;
DECLARE CONTINUE HANDLER FOR NOT FOUND
BEGIN SET err_notfound=TRUE; END;
DECLARE curcen SENSITIVE CURSOR FOR
SELECT cislo_pol, cena
FROM Cenik
FOR UPDATE;
DECLARE Polozka CHAR(20);
DECLARE Cena NUMERIC(14,2);
OPEN curcen;
LabelLoop: LOOP
FETCH NEXT FROM curcen INTO Polozka, Cena;
IF err_notfound IS TRUE THEN LEAVE LabelLoop; END IF;
CASE SUBSTRING(Polozka FROM 1 FOR 1)
WHEN "X" THEN
UPDATE SET Cena = Cena*0.9 WHERE CURRENT OF curcen;
WHEN "A" THEN
UPDATE SET Cena = Cena*2 WHERE CURRENT OF curcen;
ELSE
DELETE WHERE CURRENT OF curcen;
END CASE;
END LOOP LabelLoop;
CLOSE curcen;
END;
Příkaz CASE | Řídící příkazy | Příkaz WHILE |