Salta el contingut

3. Control del flux

3.1. Sentència IF

Sintaxi:

SQL
1
2
3
4
IF condició THEN sentencia
[ ELSEIF condició THEN sentencia ]
[ ELSE sentencia ]
END IF;

Exemple:

SQL
1
2
3
4
IF a<b AND a<c THEN SET min = a;
ELSEIF b<c THEN SET min = b;
ELSE SET min = c;
END IF;

3.2. Sentència CASE

Sintaxi:

SQL
1
2
3
4
5
CASE case_value
WHEN when_value THEN statement_list
[WHEN when_value THEN statement_list] ...
[ELSE statement_list]
END CASE;

O bé:

SQL
1
2
3
4
5
CASE
WHEN search_condition THEN statement_list
[WHEN search_condition THEN statement_list] ...
[ELSE statement_list]
END CASE;

Exemples:

SQL
1
2
3
4
5
6
CASE mes
WHEN 1 THEN SET nom='gener';
WHEN 2 THEN SET nom='febrer';
...
ELSE SET nom='error';
END CASE;
SQL
1
2
3
4
5
CASE
WHEN nota>=0 AND nota <5 THEN SET text='insuficient';
WHEN nota>=5 AND nota <6 THEN SET text='aprovat';
...
END CASE;

3.3. Sentència WHILE - DO

Sintaxi:

SQL
1
2
3
WHILE condició DO
sentències
END WHILE;

Mentre es compleix la condició, s'executen les sentències.

Exemple:

SQL
1
2
3
4
5
6
7
8
CREATE PROCEDURE exemple_while_do()
BEGIN
DECLARE n INT DEFAULT 5;
WHILE n > 0 DO
...
SET n = n - 1;
END WHILE;
END

3.4. Sentència REPEAT - UNTIL

Sintaxi:

SQL
1
2
3
REPEAT
sentències
UNTIL condició END REPEAT;

Es repetixen les sentències fins que la condició es complisca. És com un do-while, però la condició ha de ser la contrària per a que s'executen les sentències.

Exemple:

SQL
1
2
3
4
5
6
7
8
CREATE PROCEDURE exemple_repeat_until()
BEGIN
DECLARE n INT DEFAULT 5;
REPEAT
...
SET n = n - 1;
UNTIL n<=0 END REPEAT;
END

Pregunta

Fan el mateix els dos exemples anteriors de do-while i repeat-until?

Nota

L'operador condicional d'igualtat es representa per un signe igual ( = ).

3.5. Sentència LOOP, LEAVE i ITERATE

Exemple:

SQL
CREATE PROCEDURE exemple_loop(n INT)
BEGIN
      label1: LOOP       -- Creació del bucle (loop) etiquetat com 'label1'
SET n = n + 1;
IF n < 10 THEN
   ITERATE label1;       -- Anem a l'inici del bucle (com el continue de Java)
END IF;
LEAVE label1;            -- Eixim del bucle (com el break de Java)
    END LOOP label1;
      SET @x = n;
END

Explicació:

Amb LOOP creem un bucle infinit: no posem cap condició ni al principi (com en el while-do) ni al final (com en el repeat-until), sinó dins del cos del bucle: amb el LEAVE eixirem del bucle i amb el ITERATE tornarem directament a l'inici del bucle. Estes dos sentències també es poden posar dins dels altres bucles que hem vist.

Estes sentències (LOOP, LEAVE i ITERATE) no són recomanables perquè trenquen la idea de la programació estructurada.

3.6. Exercicis

Exercicis amb sentències de control de flux (BD futbol)

3. Crea el procediment inserirGolejador al qual li passes com a paràmetre el dorsal, el codi de l'equip, el nom del jugador, la quantitat de partits jugats i la quantitat de gols marcats. El procediment caldrà guardar eixa informació (en les taules de jugadors i golejadors), però caldrà tindre en compte primer si eixe jugador ja existia o no en la base de dades (ja que haurà de fer inserts o updates en cada cas).

A continuació fes 3 crides al procediment per comprovar que funciona correctament:

  • a) Una crida amb un jugador que no existisca.
  • b) Una crida amb un jugador que existisca com a jugador però no com a golejador.
  • c) Una crida amb un jugador que existisca com a jugador i golejador.

4. Crea el procediment inserirJornades a la qual se li passa una quantitat de jornades i ha d'inserir tantes jornades com diga eixe número. La data no es posarà i el número de les jornades serà correlatiu a l'última jornada que hi ha guardada en la taula de jornades. A continuació, crida al procediment per a inserir 10 jornades. Comprova que s'han creat bé.

5. Funció tipusJugador, que li passes un jugador (dorsal i equip) i retorna una paraula depenent dels gols marcats. Si 0 gols, 'cono'; entre 1 i 10 'normal'; entre 11 i 20 'bo'; entre 20 i 30 'crack'; i més de 30 'megacrack'. Fes-ho amb l'estructura del CASE. A continuació (usant una crida a la funció):

  • a) Mostra de cada jugador del Barça el nom i el tipus de jugador que és.
  • b) Mostra els megacracks de la lliga: nom del jugador i nom curt del seu equip.
  • c) Mostra quants megacracks té cada equip.

6. Funció quantsJugadors que li passes com a paràmetre el codi d'un equip i retorna la quantitat de jugadors d'eixe equip. Després, mitjançant crides a eixa funció, fes els següents problemes:

  • a) Mostra la quantitat de jugadors del Barça.
  • b) Mostra de cada equip de més de 25 jugadors: el codi, el nom curt i la quantitat de jugadors que té.
  • c) Modifica la taula d'equips. Cal incrementar un 10% el pressupost dels equips que tenen més de 25 jugadors.
  • d) Modifica la taula d'equips. Cal incrementar 1000 euros de pressupost per cada jugador que tinguen.
  • e) Esborra els equips que no tinguen jugadors.