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 el siguientewing tipos de declaraciones para la 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á al ORACLE para ejecutar/omitir un fragmento de código en particular según 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 que 100. Para eso ejecutaremos lo siguientewing código

Para imprimir un mensaje cuando un número tiene valor mayor a 100, ejecutamos lo siguientewing 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;
/

Explicación del código:

  • Línea de código 2: declarar la variable 'a' como tipo de datos 'NÚMERO' e inicializarla con el valor '10'.
  • Línea de código 4: Imprimir la declaración “Programa iniciado”.
  • Línea de código 5: Verificar la condición, si la variable 'a' es mayor que '100'.
  • Línea de código 6: Si 'a' es mayor que '100', entonces se imprimirá "a es mayor que 100". Si 'a' es menor o igual a 100, entonces la condición falla, por lo que se ignora la declaración de impresión anterior.
  • Línea de código 8: Imprimir la declaración “Programa completado”.

Salida de código:

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 lo siguientewing 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;
/

Explicación del código:

  • Línea de código 2: Declarar la variable 'a' como 'CHAR' de tipo de datos de tamaño '1' e inicializarla con el valor 'u'.
  • Línea de código 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.
  • Línea de código 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.

Salida de código:

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;
/

Explicación del código:

  • Línea de código 2: declarar la variable 'a' como tipo de datos 'NÚMERO' e inicializarla con el valor '11'.
  • Línea de código 4: Imprimir la declaración “Programa iniciado”.
  • Línea de código 5: Verificar la condición, si el módulo de la variable 'a' por '2' es 0.
  • Línea de código 6: si es '0', se imprimirá "a es un número par".
  • Línea de código 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".
  • Línea de código 10: Impresión de la declaración "Programa completado"

Salida de código:

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.

Note: 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 declaración IF de la siguiente manerawing Dos casos.
    • 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;
/

Explicación del código:

  • Línea de código 2: declarar la variable 'marca' como tipo de datos 'NÚMERO' e inicializarla con el valor '55'.
  • Línea de código 4: Imprimir la declaración “Programa iniciado”.
  • Línea de código 5: Verificando la condición1, si 'marca' es mayor o igual a 70.
  • Línea de código 7: dado que la condición 1 falló, se marca la condición 2 '70>marca>=40'.
  • Línea de código 8: La condición2 devuelve , por lo que se imprimirá el mensaje "Grado B".
  • Línea de código 12: Impresión de la declaración “Programa completado”.
  • En este caso, se omitirá la condición3 'marca antes de la condición35.

Salida de código:

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;
/

Explicación del código:

  • Línea de código 2: declarar la variable 'marca' como tipo de datos 'NÚMERO' e inicializarla con el valor '25'.
  • Línea de código 4: Imprimir la declaración “Programa iniciado”.
  • Línea de código 5: Verificando la condición 1, si 'marca' es mayor o igual a 70.
  • Línea de código 7: dado que la condición 1 falló, se marca la condición 2 '70>marca>=40'.
  • Línea de código 8: dado que la condición 2 falló, se marca la condición 3 '40>marca>=35'.
  • Línea de código 11: dado que no se cumplen todas las condiciones, el control ahora verificará la presencia del bloque ELSE e imprimirá el mensaje "Sin calificación" del bloque ELSE.
  • Línea de código 14: Impresión de la declaración “Programa completado”.

Salida de código:

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 'SI' considerará el nearest Declaración 'END IF' como punto final para esa condición en 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 numbers mediante el uso de la declaración Nested-If. El numbers se asignará 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á utilizando 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;
/

Explicación del código:

  • Línea de código 2: declarar la variable 'a' como tipo de datos 'NÚMERO' e inicializarla con el valor '10'.
  • Línea de código 3: declarar la variable 'b' como tipo de datos 'NÚMERO' e inicializarla con el valor '15'.
  • Línea de código 4: declarar la variable 'c' como tipo de datos 'NÚMERO' e inicializarla con el valor '20'.
  • Línea de código 6: Imprimir la declaración “Programa iniciado” (línea 6).
  • Línea de código 7: Verificación de la condición 1, si 'a' es mayor que 'b' (línea 7).
  • Línea de código 10: si 'a' es mayor que 'b, entonces la condición en 'nested-if 1' verificará si 'a' es mayor que 'c' (línea 10).
  • Línea de código 13: Si aún "a" es mayor, se imprimirá el mensaje "A es mayor" (línea 11). De lo contrario, si la condición 2 falla, se imprimirá "C es mayor" (línea 13).
  • Línea de código 18: en caso de que la condición 1 devuelva falso, la condición en 'nested-if 2' verificará si 'b' es mayor que 'c' (línea 18).
  • Línea de código 21: si 'b' es mayor que 'c', se imprimirá el mensaje 'B es mayor' (línea 19); de lo contrario, si la condición 2 falla, se imprimirá 'C es mayor' (línea 21).
  • Línea de código 24: Imprimir la declaración “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.