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

Tabla de contenido:

Anonim

¿Qué son las declaraciones de toma de decisiones?

Las declaraciones de toma de decisiones son aquellas que decidirán el control de flujo de las declaraciones SQL en función de 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 en función de 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

Tipos de declaraciones para la toma de decisiones:

Oracle proporciona los siguientes tipos de declaraciones para la toma de decisiones.

  • SI-ENTONCES
  • SI-ENTONCES-ELSE
  • SI-ENTONCES-ELSIF
  • ANIDADO-SI
  • CASO
  • CASO BUSCADO

En este tutorial, aprenderá:

  • Introducción a las declaraciones de toma de decisiones
  • Declaración IF-THEN
  • Declaración IF-THEN-ELSE
  • Declaración IF-THEN-ELSIF
  • Declaración NESTED-IF

Declaración IF-THEN

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

La condición debe producir un valor booleano (verdadero / falso). Es una declaración condicional básica que permitirá que ORACLE ejecute / omita un fragmento de código en particular en función de las condiciones predefinidas.

Sintaxis de las declaraciones IF THEN:

IF THEN-executed only if the condition returns TRUEEND if;
  • En la sintaxis anterior, la palabra clave 'SI' será seguida por una condición que se evalúa como 'VERDADERO' / 'FALSO'.
  • El control ejecutará el 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 'FALSE'.

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

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

DECLAREa NUMBER :=10;BEGINdbms_output.put_line(‘Program started.' );IF( a> 100 ) THENdbms_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 'NUMBER' e inicializarla con el valor '10'.
  • Línea de código 4: Impresión de la declaración "Programa iniciado".
  • Línea de código 5: Verificando la condición, si la variable 'a' es mayor que '100'.
  • Línea de código 6: Si 'a' es mayor que '100', 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: Impresión de la declaración "Programa completado".

Salida de código:

Program started.Program completed. 

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

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

DECLAREa CHAR(1) :=’u’;BEGINIF UPPER(a) in ('A’,'E','I','0','U' ) THENdbms_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 tipo de datos 'CHAR' de tamaño '1' e inicializarla con el valor 'u'.
  • Línea de código 4: Verificando 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, entonces se imprimirá la declaración "El carácter está en vocales en inglés". Si la condición falla, entonces este programa no dará ninguna salida, ya que fuera del bloque IF-THEN no hemos emitido ninguna declaración de impresión.

Salida de código:

The character is in English Vowels

Declaración IF-THEN-ELSE

  • La instrucció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 la sintaxis de la instrucción IF-THEN-ELSE.

Sintaxis para declaraciones IF-THEN-ELSE:

IF THEN -executed only if the condition returns TRUE ELSE -execute if the condition failed (returns FALSE) END if;
  • En la sintaxis anterior, la palabra clave 'SI' será seguida por 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 cualquier caso, se ejecutará uno de los dos bloques de acción.

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

Ejemplo 1 : En este ejemplo, imprimiremos un mensaje si el número dado es par o impar.

DECLAREa NUMBER:=11;BEGINdbms_output.put_line (‘Program started');IF( mod(a,2)=0) THENdbms_output.put_line('a is even number' );ELSEdbms_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 'NUMBER' e inicializarla con el valor '11'.
  • Línea de código 4: Impresión de la declaración "Programa iniciado".
  • Línea de código 5: Verificando 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 numberProgram completed. 

Declaración IF-THEN-ELSIF

  • La declaración IF-THEN-ELSIF se utiliza principalmente cuando se debe elegir una alternativa de un conjunto de alternativas, donde cada alternativa tiene sus propias condiciones que satisfacer.
  • Se ejecutarán las primeras condiciones que devuelvan y se omitirán las condiciones restantes.
  • La instrucció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, 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 THEN-executed only if the condition returns TRUE ELSIF  ELSIF  ELSE -optionalEND if;
  • En la sintaxis anterior, el control ejecutará solo si la condición1 devuelve .
  • Si la condición 1 no se satisface, el controlador comprobará la condición 2.
  • El controlador saldrá de la instrucción IF en los dos casos siguientes.
    • Cuando el controlador encuentra alguna condición que devuelve . En este caso, se ejecutará el action_block correspondiente y el controlador saldrá de este bloque de instrucciones IF y comenzará a ejecutar el código restante.
    • Cuando no se cumple ninguna de las condiciones, el controlador entonces ejecutará el bloque ELSE si está presente, luego saldrá de la instrucción IF.

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

Ejemplo 1: sin bloque ELSE

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

DECLAREmark NUMBER :=55;BEGINdbms_output.put_line(‘Program started.’ );IF( mark >= 70) THENdbms_output.put_line(‘Grade A’);ELSIF(mark >= 40 AND mark < 70) THENdbms_output.put_line(‘Grade B');ELSIF(mark >=35 AND mark < 40) THENdbms_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: Impresión de 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 verifica la condición 2 '70> marca> = 40 '.
  • Línea de código 8: La condtition2 devuelve , por lo que se imprimirá el mensaje 'Grade B'.
  • Línea de código 12: Impresión de la declaración "Programa completado".
  • En este caso, se omitirá la condición3 'marca <35', ya que el controlador encontró una condición que devuelve antes de la condición3.

Salida de código:

Program started.Grade BProgram completed.

Ejemplo 2 : con bloque ELSE

En este ejemplo, vamos a imprimir la calificación basada en las calificaciones dadas con la condición else (calificación> = 70 Calificación A, calificación> = 40 y calificación <70 Calificación B, calificación> = 35 y calificación <40 Calificación C, más 'Sin calificación').

DECLAREmark NUMBER :=25;BEGINdbms_output.put_line(‘Program started.’ );IF( mark >= 70) THENdbms_output.put_line(‘Grade A’);ELSIF(mark >= 40 AND mark < 70) THENdbms_output.put_line(‘Grade B');ELSIF(mark >=35 AND mark < 40) THENdbms_output.put_line(‘Grade C);ELSEdbms_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: Impresión de 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 verifica la condición 2 '70> marca> = 40 '.
  • Línea de código 8: dado que la condición2 falló, se verifica la condición3 '40> marca> = 35 '.
  • Línea de código 11: Dado que todas las condiciones fallaron, 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 GradeProgram completed.

Declaración NESTED-IF

  • Básicamente, la instrucción NESTED-IF permite a los programadores colocar una o más condiciones 'IF' dentro del de otra condición 'IF' que no sean las declaraciones normales.
  • Cada condición 'SI' debe tener una declaración 'END IF' separada que marca el fin del alcance de ese particular.
  • La declaración 'IF' considerará la declaración 'END IF' más cercana como un punto final para esa condición en particular.
  • La representación pictórica de NESTED-IF se muestra a continuación.
IF THEN -executed only if the condition returns TRUE  IF  THEN  END IF; -END IF corresponds to condition2END IF; -END IF corresponds to condition1
Explicación de la sintaxis:
  • En la sintaxis anterior, el IF externo contiene una instrucción IF más en su bloque de acción.
  • La condición1 devuelve , luego el control ejecutará y verificará la condición2.
  • Si condition2 también devuelve , también se ejecutará .
  • En caso de que condition2 se evalúe como , SQL omitirá el .

Aquí vamos a ver un ejemplo de Nested If -

Ejemplo de instrucción If anidada: el mayor de tres

En este ejemplo, imprimiremos 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 a continuación, es decir, Número = 10,15 y 20 y el número máximo se obtendrá mediante instrucciones anidadas-if.

DECLAREa NUMBER :=10;b NUMBER :=15;c NUMBER :=20;BEGINdbms_output.put_line(‘Program started.' );IF( a> b)THEN/*Nested-if l */dbms_output.put_line(’Checking Nested-IF 1');IF( a> c ) THENdbms_output.put_line(‘A is greatest’);ELSEdbms_output.put_line(‘C is greatest’);END IF;ELSE/*Nested-if2 */dbms_output.put_line('Checking Nested-IF 2' );IF( b> c ) THENdbms_output.put_line(’B is greatest' );ELSEdbms_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 'NUMBER' e inicializarla con el valor '10'.
  • Línea de código 3: Declarar la variable 'b' como tipo de datos 'NUMBER' e inicializarla con el valor '15'.
  • Línea de código 4: Declarar la variable 'c' como tipo de datos 'NUMBER' e inicializarla con el valor '20'.
  • Línea de código 6: Impresión de la declaración "Programa iniciado" (línea 6).
  • Línea de código 7: Verificando la condición1, 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 todavía '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 el mayor' (línea 13).
  • Línea de código 18: en caso de que condition1 devuelva falso, la condición en 'nested-if 2' comprobará si 'b' es mayor que 'c' (línea 18).
  • Línea de código 21: Si 'b' es mayor que 'c', entonces se imprimirá el mensaje 'B es mayor' (línea 19), de lo contrario, si la condición2 falla, entonces se imprimirá 'C es mayor' (línea 21).
  • Línea de código 24: Impresión de la declaración "Programa completado" (línea 24).

Salida de código:

Program started.Checking Nested-IF 2C is greatestProgram 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.

ESCRIBE

DESCRIPCIÓN

USO

SI-ENTONCES

Comprueba una condición booleana, si se ejecutará el código VERDADERO en el bloque 'ENTONCES'.

Para omitir, / ejecute un código en particular según la condición.

SI-ENTONCES-ELSE

Comprueba si hay una condición booleana, si se ejecutará el código TRUE en el bloque 'THEN', si se ejecutará el código falso en el bloque 'ELSE'.

Más apropiado en la condición 'ESTO-O-ESO'.

SI-ENTONCES-ELSIF

Comprueba una condición booleana en orden secuencial. Se ejecutará el primer bloque de la secuencia que devuelve la condición VERDADERO. Si ninguna de las condiciones en la secuencia es VERDADERA, entonces se ejecuta el código en el bloque 'ELSE'.

Se utiliza para elegir entre más de dos alternativas en su mayoría.

ANIDADO-SI

Permite una o más sentencias IF-THEN o IF-THEN-ELSIF dentro de otras sentencias IF-THEN o IF-THEN-ELSIF.

Se utiliza principalmente en situaciones de condición anidada.