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”.

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