Oracle PL/SQL IF ENTONCES ELSE Declaración: ELSIF, NESTED-IF

¿Qué son las declaraciones para la toma de decisiones?

Las declaraciones de toma de decisiones son aquellas que decidirán el control de flujo de SQL declaraciones basadas en las condiciones. Le da al programador un mejor control para evitar que se ejecute un código en particular (diagrama 1) o elegir un código deseado según la condición (diagrama 2). A continuación se muestra la representación gráfica de la “Declaración de toma de decisiones”.

Diagrama de declaración de toma de decisiones
Diagrama de declaración de toma de decisiones

Tipos de declaraciones para la toma de decisiones:

Oracle Proporciona los siguientes tipos de declaraciones de toma de decisiones.

  • IF-THEN
  • SI-ENTONCES-OTRO
  • SI-ENTONCES-ELSIF
  • ANIDADO-SI
  • CASE
  • CASO BUSCADO

Declaración SI-ENTONCES

La declaración IF-THEN se utiliza principalmente para ejecutar una sección particular de códigos solo cuando se cumple la condición.

La condición debe ceder Boolean (Verdadero/Falso). Es una declaración condicional básica que permitirá a ORACLE ejecutar/omitir un fragmento particular de código en función de las condiciones predefinidas.

Sintaxis para declaraciones SI ENTONCES:

IF <condition: returns Boolean>
THEN
 -executed only if the condition returns TRUE 
 <action_block>
END if;
  • En la sintaxis anterior, la palabra clave "SI" irá seguida de una condición que se evalúa como "VERDADERO"/"FALSO".
  • El control ejecutará solo si la condición devuelve .
  • En el caso de que la condición se evalúe como , SQL omitirá el y comenzará a ejecutar el código junto al bloque 'END IF'.

Nota: Siempre que la condición se evalúe como "NULL", SQL tratará "NULL" como "FALSO".

Ejemplo :En este ejemplo vamos a imprimir un mensaje cuando el número sea mayor a 100. Para ello ejecutaremos el siguiente código

Para imprimir un mensaje cuando un número tiene un valor mayor a 100, ejecutamos el siguiente código.

DECLARE 
a NUMBER :=10;
BEGIN
dbms_output.put_line(‘Program started.' );
IF( a > 100 ) THEN
dbms_output.put_line('a is greater than 100'); 
END IF;
dbms_output.put_line(‘Program completed.');
END;
/

Code Explicación:

  • Code línea 2: Declarar la variable 'a' como tipo de datos 'NUMBER' e inicializarla con el valor '10'.
  • Code línea 4: Imprimiendo el mensaje “Programa iniciado”.
  • Code Línea 5: Comprobando la condición de que la variable 'a' sea mayor que '100'.
  • Code Línea 6: Si 'a' es mayor que '100', se imprimirá "a es mayor que 100". Si 'a' es menor o igual que 100, la condición no se cumple y se ignora la instrucción de impresión anterior.
  • Code línea 8: Imprimiendo el mensaje “Programa completado”.

Code Salida:

Program started.
Program completed.

Ejemplo 2: En este ejemplo, vamos a imprimir un mensaje si un alfabeto determinado está presente en vocales en inglés (A, E, I, O, U).

Para imprimir un mensaje cuando el carácter dado es Vocal, ejecutamos el siguiente código.

DECLARE 
a CHAR(1) :=’u’;
BEGIN
IF UPPER(a) in ('A’,'E','I','0','U' ) THEN 
dbms_output.put_line(‘The character is in English Vowels');
END IF;
END;
/

Code Explicación:

  • Code línea 2: Declarar la variable 'a' como 'CHAR' de tipo de datos de tamaño '1' e inicializarla con el valor 'u'.
  • Code línea 4: Comprobando la condición, si la variable "a" está presente en la lista ("A", "E", "I", "O", "U").
  • El valor de 'a' se ha convertido a mayúsculas antes de comparar para que la comparación no distinga entre mayúsculas y minúsculas.
  • Code línea 5: Si 'a' está presente en la lista, se imprimirá la declaración "El carácter está en vocales inglesas". Si la condición falla, entonces este programa no dará ningún resultado, ya que fuera del bloque IF-THEN no hemos emitido ninguna declaración impresa.

Code Salida:

The character is in English Vowels

Declaración SI-ENTONCES-ELSE

  • La declaración IF-THEN-ELSE se utiliza principalmente para seleccionar entre dos alternativas según la condición.
  • A continuación se muestra la representación de sintaxis de la declaración IF-THEN-ELSE.

Sintaxis para declaraciones IF-THEN-ELSE:

IF <condition: returns Boolean>
THEN
	-executed only if the condition returns TRUE
	<action_blockl>
ELSE
	-execute if the condition failed (returns FALSE)
	<action_block2>
END if;
  • En la sintaxis anterior, la palabra clave "SI" irá seguida de una condición que se evalúa como "VERDADERO"/"FALSO".
  • El control ejecutará solo si la condición devuelve .
  • En caso de que la condición se evalúe como , SQL ejecutará .
  • En todo caso se ejecutará uno de los dos bloques de actuación.

Nota: Siempre que la condición se evalúe como "NULL", SQL tratará "NULL" como "FALSO".

Ejemplo : En este ejemplo, vamos a imprimir un mensaje si el número dado es par o impar.

DECLARE 
a NUMBER:=11;
BEGIN
dbms_output.put_line (‘Program started');
IF( mod(a,2)=0) THEN 
dbms_output.put_line('a is even number' ); 
ELSE
dbms_output.put_line('a is odd number1); 
END IF;
dbms_output.put_line (‘Program completed.’);
END;
/

Code Explicación:

  • Code línea 2: Declarar la variable 'a' como tipo de datos 'NUMBER' e inicializarla con el valor '11'.
  • Code línea 4: Imprimiendo el mensaje “Programa iniciado”.
  • Code línea 5: Comprobando la condición de si el módulo de la variable 'a' por '2' es 0.
  • Code línea 6: Si es '0', entonces se imprimirá "a es un número par".
  • Code línea 7: Si el valor del módulo no es igual a '0', entonces la condición devuelve , por lo que se imprimirá el mensaje “a es un número impar”.
  • Code línea10: Impresión del mensaje “Programa completado”

Code Salida:

Program started.
a is odd number
Program completed.

Declaración IF-THEN-ELSIF

  • La declaración IF-THEN-ELSIF se utiliza principalmente cuando se debe elegir una alternativa entre un conjunto de alternativas, donde cada alternativa tiene sus propias condiciones que debe cumplir.
  • Se ejecutarán las primeras condiciones que devuelvan y se omitirán las condiciones restantes.
  • La declaración IF-THEN-ELSIF puede contener el bloque "ELSE". Este bloque 'ELSE' se ejecutará si no se cumple ninguna de las condiciones.

Nota: : El bloque ELSE es opcional en esta declaración condicional. Si no hay ningún bloque ELSE y no se cumple ninguna de las condiciones, entonces el controlador omitirá todo el bloque de acción y comenzará a ejecutar la parte restante del código.

Sintaxis para declaraciones IF-THEN-ELSIF:

IF <conditionl: returns Boolean>
THEN
-executed only if the condition returns TRUE <
action_blockl>
ELSIF <condition2 returns Boolean> <
action_block2>
ELSIF <condition3:returns Boolean> <
action_block3>
ELSE —optional 
<action_block_else>
END if;
  • En la sintaxis anterior, el control ejecutará solo si la condición1 devuelve .
  • Si no se cumple la condición 1, el controlador comprobará la condición 2.
  • El controlador saldrá de la instrucción IF en los dos casos siguientes.
    • Cuando el controlador encontró alguna condición que devuelve . En este caso, se ejecutará el bloque de acción correspondiente y el controlador saldrá de este bloque de declaración IF y comenzará a ejecutar el código restante.
    • Cuando no se cumple ninguna de las condiciones, el controlador ejecutará el bloque ELSE si está presente y luego saldrá de la declaración IF.

Nota: Siempre que la condición se evalúe como "NULL", SQL tratará "NULL" como "FALSO".

Ejemplo 1: Sin bloque ELSE

En este ejemplo, vamos a imprimir la calificación en función de las calificaciones dadas sin otra condición (nota >= 70 Calificación A, calificación >=40 y calificación =70 y calificación <35 Calificación C).

DECLARE
mark NUMBER :=55;
BEGIN
dbms_output.put_line(‘Program started.’ );
IF( mark >= 70) THEN 
dbms_output.put_line(‘Grade A’);
ELSIF(mark >= 40 AND mark < 70) THEN
dbms_output.put_line(‘Grade B'); 
ELSIF(mark >=35 AND mark < 40) THEN
dbms_output.put_line(‘Grade C’);
END IF;
dbms_output.put_line(‘Program completed.’); 
END;
/

Code Explicación:

  • Code línea 2: Declarar la variable 'mark' como tipo de datos 'NUMBER' e inicializarla con el valor '55'.
  • Code línea 4: Imprimiendo el mensaje “Programa iniciado”.
  • Code línea 5: Comprobando la condición1, si 'mark' es mayor o igual a 70.
  • Code línea 7: Dado que la condición1 falló, entonces se verifica la condición2 '70>mark>=40'.
  • Code línea 8: La condición2 devuelve Por lo tanto, se imprimirá el mensaje 'Grado B'.
  • Code línea12: Imprimiendo el mensaje “Programa completado”.
  • En este caso, se omitirá la condición3 'marca antes de la condición35.

Code Salida:

Program started.
Grade B
Program completed.

Ejemplo : Con bloque ELSE

En este ejemplo, vamos a imprimir la calificación en función de las calificaciones dadas con otra condición (calificación >= 70 Calificación A, calificación >=40 y calificación =70 y calificación <35 Calificación C, de lo contrario 'Sin calificación').

DECLARE
mark NUMBER :=25;
BEGIN
dbms_output.put_line(‘Program started.’ );
IF( mark >= 70) THEN 
dbms_output.put_line(‘Grade A’); 
ELSIF(mark >= 40 AND mark < 70) THEN 
dbms_output.put_line(‘Grade B'); 
ELSIF(mark >=35 AND mark < 40) THEN 
dbms_output.put_line(‘Grade C);
ELSE
dbms_output.put_line(‘No Grade’);
END IF;
dbms_output.put_line(‘Program completed.' ); 
END;
/

Code Explicación:

  • Code línea 2: Declarar la variable 'mark' como tipo de datos 'NUMBER' e inicializarla con el valor '25'.
  • Code línea 4: Imprimiendo el mensaje “Programa iniciado”.
  • Code línea 5: Comprobando la condición 1, si 'mark' es mayor o igual a 70.
  • Code línea 7: Dado que la condición1 falló, entonces se verifica la condición2 '70>mark>=40'.
  • Code línea 8: Dado que la condición2 falló, entonces se verifica la condición3 '40>mark>=35'.
  • Code línea 11: Como todas las condiciones no se cumplen, el control ahora verificará la presencia del bloque ELSE y imprimirá el mensaje 'Sin calificación' del bloque ELSE.
  • Code línea14: Imprimiendo el mensaje “Programa completado”.

Code Salida:

Program started.
No Grade 
Program completed.

Declaración SI ANIDADA

  • Básicamente, la declaración NESTED-IF permite a los programadores colocar una o más condiciones 'IF' dentro del de otra condición 'IF' que no sean declaraciones normales.
  • Cada condición 'SI' debe tener una declaración 'END IF' separada que marque el final del alcance de ese en particular.
  • La declaración 'IF' considerará la declaración 'END IF' más cercana como un punto final para esa condición particular.
  • La representación pictórica de NESTED-IF se muestra a continuación.

Declaración SI ANIDADA

Declaración SI ANIDADA

IF <conditionl: returns Boolean>
THEN
	—executed only if the condition returns TRUE
	<action block1 starts>
	IF <condition2: returns Boolean>
	THEN
	<action_block2>
	END IF; —END IF corresponds to condition2
<action_blockl ends>
END IF; —END IF corresponds to condition1

Explicación de sintaxis:

  • En la sintaxis anterior, el IF externo contiene una declaración IF más en su bloque de acción.
  • La condición1 devuelve , luego el control ejecutará y verificará la condición1.
  • Si la condición2 también devuelve , entonces también se ejecutará .
  • En caso de que la condición2 se evalúe como , SQL omitirá el .

Aquí veremos un ejemplo de Nested If –

Ejemplo de declaración If anidada: mayor de tres números

En este ejemplo, vamos a imprimir el mayor de tres números utilizando la instrucción Nested-If. Los números se asignarán en la parte de declaración, como puede ver en el código siguiente, es decir, Número = 10,15 y 20 y el número máximo se obtendrá mediante declaraciones if anidadas.

DECLARE 
a NUMBER :=10; 
b NUMBER :=15; 
c NUMBER :=20;
BEGIN
dbms_output.put_line(‘Program started.' );
IF( a > b)THEN
/*Nested-if l */
	dbms_output.put_line(’Checking Nested-IF 1'); 
	IF( a > c ) THEN
	dbms_output.put_line(‘A is greatest’); 
	ELSE
	dbms_output.put_line(‘C is greatest’); 
	END IF;
ELSE
/*Nested-if2 */
	dbms_output.put_line('Checking Nested-IF 2' ); 
	IF( b > c ) THEN
	dbms_output.put_line(’B is greatest' ); 
	ELSE
	dbms_output.put_line(’C is greatest' ); 
	END IF;
END IF;
dbms_output.put_line(‘Program completed.’ );
END;
/

Code Explicación:

  • Code línea 2: Declarar la variable 'a' como tipo de datos 'NUMBER' e inicializarla con el valor '10'.
  • Code línea 3: Declarar la variable 'b' como tipo de datos 'NUMBER' e inicializarla con el valor '15'.
  • Code línea 4: Declarar la variable 'c' como tipo de datos 'NUMBER' e inicializarla con el valor '20'.
  • Code línea 6: Imprimiendo el mensaje “Programa iniciado” (línea 6).
  • Code línea 7: Comprobando la condición1, si 'a' es mayor que 'b' (línea 7).
  • Code línea 10: Si 'a' es mayor que 'b', entonces la condición en 'nested-if 1' comprobará si 'a' es mayor que 'c' (línea 10).
  • Code Línea 13: Si 'a' sigue siendo mayor, se imprimirá el mensaje 'A es el mayor' (línea 11). De lo contrario, si la condición 2 falla, se imprimirá 'C es el mayor' (línea 13).
  • Code línea 18: En caso de que condition1 devuelva falso, entonces la condición en 'nested-if 2' comprobará si 'b' es mayor que 'c' (línea 18).
  • Code línea 21: Si 'b' es mayor que 'c', entonces se imprimirá el mensaje 'B es el mayor' (línea 19), de lo contrario, si la condición 2 falla, entonces se imprimirá 'C es el mayor' (línea 21).
  • Code línea 24: Imprimiendo el mensaje “Programa completado” (línea 24).

Salida de código:

Program started.
Checking Nested-IF 2
C is greatest
Program completed.

Resumen

En este capítulo, hemos aprendido las diferentes declaraciones de toma de decisiones y su sintaxis y ejemplos. La siguiente tabla ofrece el resumen de varias declaraciones condicionales que hemos discutido.

TIPO DESCRIPCIÓN USO
IF-THEN Comprueba una condición booleana, si se ejecutará el código VERDADERO en el bloque 'ENTONCES'. Para omitir/ejecutar un código particular según la condición.
SI-ENTONCES-OTRO Comprueba si hay una condición booleana, si se ejecutará el código VERDADERO en el bloque 'ENTONCES', si se ejecutará el código falso en el bloque 'ELSE'. Más apropiado en la condición "ESTO O AQUEL".
SI-ENTONCES-ELSIF Comprueba una condición booleana en orden secuencial. Se ejecutará el primer bloque de la secuencia que devuelva la condición VERDADERA. Si ninguna de las condiciones de la secuencia es VERDADERA, entonces se ejecuta el código del bloque "ELSE". Solía ​​elegir entre más de dos alternativas mayoritariamente.
ANIDADO-SI Permite una o más declaraciones IF-THEN o IF-THEN-ELSIF dentro de otras declaraciones IF-THEN o IF-THEN-ELSIF. Se utiliza principalmente en situaciones de condición anidada.

Resumir este post con: