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...THENIF...THEN...ELSEIF...THEN...ELSIF...ELSECASE
-
Bucles
LOOPWHILE LOOPFOR LOOP
-
Sentències de control de bucle
EXITCONTINUE
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
