Les estructures de control són fonamentals en qualsevol llenguatge de programació, ja que permeten controlar el flux d'execució del codi. En PL/SQL, les estructures de control inclouen sentències condicionals, bucles i altres mecanismes per gestionar el flux del programa.
Tipus d'estructures de control
-
Sentències condicionals
IF...THEN
IF...THEN...ELSE
IF...THEN...ELSIF...ELSE
CASE
-
Bucles
LOOP
WHILE LOOP
FOR LOOP
-
Sentències de control de bucle
EXIT
CONTINUE
Sentències condicionals
IF...THEN
La sentència IF...THEN
s'utilitza per executar un bloc de codi només si una condició és certa.
DECLARE v_salari NUMBER := 3000; BEGIN IF v_salari > 2500 THEN DBMS_OUTPUT.PUT_LINE('El salari és superior a 2500'); END IF; END; /
IF...THEN...ELSE
La sentència IF...THEN...ELSE
permet executar un bloc de codi si la condició és certa i un altre bloc si la condició és falsa.
DECLARE v_salari NUMBER := 2000; BEGIN IF v_salari > 2500 THEN DBMS_OUTPUT.PUT_LINE('El salari és superior a 2500'); ELSE DBMS_OUTPUT.PUT_LINE('El salari és 2500 o inferior'); END IF; END; /
IF...THEN...ELSIF...ELSE
La sentència IF...THEN...ELSIF...ELSE
permet comprovar múltiples condicions.
DECLARE v_salari NUMBER := 2000; BEGIN IF v_salari > 3000 THEN DBMS_OUTPUT.PUT_LINE('El salari és superior a 3000'); ELSIF v_salari > 2500 THEN DBMS_OUTPUT.PUT_LINE('El salari és superior a 2500 però inferior o igual a 3000'); ELSE DBMS_OUTPUT.PUT_LINE('El salari és 2500 o inferior'); END IF; END; /
CASE
La sentència CASE
és una alternativa a les múltiples sentències IF...THEN...ELSIF
.
DECLARE v_grade CHAR(1) := 'B'; BEGIN CASE v_grade WHEN 'A' THEN DBMS_OUTPUT.PUT_LINE('Excel·lent'); WHEN 'B' THEN DBMS_OUTPUT.PUT_LINE('Bé'); WHEN 'C' THEN DBMS_OUTPUT.PUT_LINE('Suficient'); ELSE DBMS_OUTPUT.PUT_LINE('Insuficient'); END CASE; END; /
Bucles
LOOP
El bucle LOOP
executa un bloc de codi repetidament fins que es troba una sentència EXIT
.
DECLARE v_counter NUMBER := 1; BEGIN LOOP DBMS_OUTPUT.PUT_LINE('Iteració: ' || v_counter); v_counter := v_counter + 1; EXIT WHEN v_counter > 5; END LOOP; END; /
WHILE LOOP
El bucle WHILE LOOP
executa un bloc de codi mentre una condició sigui certa.
DECLARE v_counter NUMBER := 1; BEGIN WHILE v_counter <= 5 LOOP DBMS_OUTPUT.PUT_LINE('Iteració: ' || v_counter); v_counter := v_counter + 1; END LOOP; END; /
FOR LOOP
El bucle FOR LOOP
s'utilitza per iterar un nombre determinat de vegades.
Sentències de control de bucle
EXIT
La sentència EXIT
s'utilitza per sortir d'un bucle.
DECLARE v_counter NUMBER := 1; BEGIN LOOP DBMS_OUTPUT.PUT_LINE('Iteració: ' || v_counter); v_counter := v_counter + 1; EXIT WHEN v_counter > 5; END LOOP; END; /
CONTINUE
La sentència CONTINUE
s'utilitza per saltar a la següent iteració del bucle.
BEGIN FOR v_counter IN 1..5 LOOP IF v_counter = 3 THEN CONTINUE; END IF; DBMS_OUTPUT.PUT_LINE('Iteració: ' || v_counter); END LOOP; END; /
Exercicis pràctics
Exercici 1
Escriu un bloc PL/SQL que imprimeixi els números del 1 al 10, però que salti el número 5.
Solució:
BEGIN FOR v_counter IN 1..10 LOOP IF v_counter = 5 THEN CONTINUE; END IF; DBMS_OUTPUT.PUT_LINE('Número: ' || v_counter); END LOOP; END; /
Exercici 2
Escriu un bloc PL/SQL que classifiqui una nota (A, B, C, D, F) i imprimeixi un missatge corresponent utilitzant la sentència CASE
.
Solució:
DECLARE v_grade CHAR(1) := 'B'; BEGIN CASE v_grade WHEN 'A' THEN DBMS_OUTPUT.PUT_LINE('Excel·lent'); WHEN 'B' THEN DBMS_OUTPUT.PUT_LINE('Bé'); WHEN 'C' THEN DBMS_OUTPUT.PUT_LINE('Suficient'); WHEN 'D' THEN DBMS_OUTPUT.PUT_LINE('Insuficient'); WHEN 'F' THEN DBMS_OUTPUT.PUT_LINE('Suspès'); ELSE DBMS_OUTPUT.PUT_LINE('Nota no vàlida'); END CASE; END; /
Conclusió
Les estructures de control en PL/SQL són essencials per gestionar el flux d'execució del codi. Hem vist com utilitzar les sentències condicionals IF
i CASE
, així com els bucles LOOP
, WHILE LOOP
i FOR LOOP
. També hem après a utilitzar les sentències EXIT
i CONTINUE
per controlar els bucles. Amb aquests conceptes, estàs preparat per escriure codi PL/SQL més complex i eficient.
Curs de PL/SQL
Mòdul 1: Introducció a PL/SQL
Mòdul 2: Fonaments de PL/SQL
- Estructura del bloc PL/SQL
- Variables i tipus de dades
- Estructures de control
- Cursors
- Gestió d'excepcions