IF, LOOP, ITERATE, LEAVE, REPEAT/UNTIL i WHILE/DO.
La sentència IF:
Què és?
És una declaració, també existeix l'if com a funció i no l'hem de confondre.
Sintaxi
IF search_condition THEN statement_list
[ELSEIF search_condition THEN statement_list] ...
[ELSE statement_list]
END IF
Funcionament
IF implementa un constructor condicional bàsic. Si search_condition s'avalua a cert, la instrucció SQL corresponent «THEN» s'executa. Si no coincideix cap search_condition, salta a la successió d'ELSEIF/ELSE en cas que n'hi hagi.
Exemple
Crearem un petit procediment. El següent exemple utilitza la sentència IF per comprovar si un número és múltiple de 100.
delimiter //
create procedure select_arbitre(in n int)
begin
if (mod(n,100) = 0) then
select n/100;
end if;
end //
La sentència CASE:
Què és?
La instrucció CASE per a procediments emmagatzemats implementa un constructor condicional complex.
SintaxiCASE case_value
WHEN when_value THEN statement_list
[WHEN when_value THEN statement_list] ...
[ELSE statement_list]
END CASECASEWHEN search_condition THEN statement_list
[WHEN search_condition THEN statement_list] ...
[ELSE statement_list]
END CASEFuncionament
Si una search_condition s'avalua a cert, la instrucció SQL corresponent s'executa. Si no coincideix cap condició de cerca, la instrucció a la clàusula ELSE s'executa.
Nota: La sintaxi d'una instrucció CASE mostrada aquí per a ús dins de procediments emmagatzemats difereix lleugerament de l'expressió CASE. La instrucció CASE no pot tenir una clàusula ELSE NULL i acaba amb END CASE en comptes de END.
La sentència LOOP:
Què és?
Loop implementa un constructor de bucle simple que permet l'execució repetida d'instruccions particulars.
Sintaxi
[begin_label:] LOOP
statment_list
END LOOP [end_label]
Funcionament
L'execució de la instrucció es repeteix fins que acaba el bucle, normalment mitjançant la instrucció «LEAVE».
Normalment les instruccions LOOP s'etiqueten:
«end_label» no es pot donar si no està present «begin_label», i si tots dos hi són, han de ser el mateix.
Normalment s'usa conjuntament amb els constructors «LEAVE», per abandonar el bucle en cas que es compleixi una condició, i «ITERATE» per tornar a fer el bucle si compleix una condició.
La sentència LEAVE:
Què és?
Aquesta instrucció s'utilitza per sortir d'alguna estructura de control. Es pot utilitzar dins d'un BEGIN ... END o dins d'algun cicle (bucles).
Sintaxi
label1: LOOP
SET p1 = p1 + 1;
IF p1 < 10 THEN
ITERATE label1;
END IF;
LEAVE label1; ---> Aquí trenquem un bucle
END LOOP label1;
Funcionament
Amb aquesta instrucció aconseguim trencar el bucle i sortir-ne.
La sentència ITERATE:
Què és?
ITERATE significa «torna a fer el bucle».
ITERATE només pot aparèixer en instruccions LOOP, REPEAT i WHILE.
Sintaxi
CREATE PROCEDURE doiterate(p1 INT)
BEGIN
label1: LOOP
SET p1 = p1 + 1;
IF p1 < 10 THEN
ITERATE label1;
Funcionament
Si es compleix la condició, l'Iterate repeteix el bucle.
La sentència REPEAT/UNTIL
Què és?
La sentència REPEAT/UNTIL és una instrucció que repeteix la instrucció que es troba al seu interior fins que es compleix una condició.
Sintaxi
Aquesta sentència està formada per dos paràmetres bàsics:
- La sentència o llista de sentències que s'han de repetir.
- La condició de sortida del bucle.
La sentència ha d'acabar amb una sentència END REPEAT;
A més, la sentència REPEAT pot estar etiquetada per una etiqueta d'inici (BEGIN) i una de final (END) iguals.
Funcionament
En aquesta sentència es repeteix la llista de sentències fins que la condició és certa. El bucle sempre entra almenys una vegada i la llista de sentències pot consistir en més d'una, separades per un punt i coma (;) després d'haver delimitat la //.
La sentència WHILE/DO
Què és?
La sentència WHILE/DO és una instrucció que repeteix la instrucció que es troba al seu interior mentre la condició del WHILE sigui certa.
Sintaxi
[begin_label:]
WHILE search_condition DO
statement_list
END WHILE
[end_label]
Aquesta sentència està formada per dos paràmetres bàsics:
- La condició de permanència en el bucle.
- La sentència o llista de sentències que s'han de repetir.
La sentència ha d'acabar amb una sentència END WHILE;
A més, la sentència WHILE/DO pot estar etiquetada per una etiqueta d'inici (BEGIN) i una de final (END) iguals.
Funcionament
En aquesta sentència es repeteix la llista de sentències mentre la condició sigui certa. El bucle sempre entra almenys una vegada i la llista de sentències pot consistir en més d'una, separades per un punt i coma (;) després d'haver delimitat la //.
A més, la sentència WHILE/DO pot estar etiquetada per una etiqueta d'inici (BEGIN) i una de final (END) iguals.