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:

  1. La sentència o llista de sentències que s'han de repetir.
  1. 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:

  1. La condició de permanència en el bucle.
  1. 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.