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

  1. Sentències condicionals

    • IF...THEN
    • IF...THEN...ELSE
    • IF...THEN...ELSIF...ELSE
    • CASE
  2. Bucles

    • LOOP
    • WHILE LOOP
    • FOR LOOP
  3. 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.

BEGIN
  FOR v_counter IN 1..5 LOOP
    DBMS_OUTPUT.PUT_LINE('Iteració: ' || v_counter);
  END LOOP;
END;
/

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.

© Copyright 2024. Tots els drets reservats