Declaración de CASO en Oracle PL/SQL con ejemplos

⚡ Resumen inteligente

La instrucción CASE de PL/SQL selecciona una alternativa entre varias basándose en un selector, de forma similar a IF-THEN-ELSIF, pero más clara. Un CASE simple compara un valor de selector, mientras que un CASE con búsqueda evalúa una condición en cada cláusula WHEN y ejecuta la primera que sea verdadera.

  • 🔀 Propósito: CASE elige un bloque de acción entre varios, utilizando un selector en lugar de una cadena booleana.
  • 🎯 Selector: La expresión CASE se evalúa una sola vez y se compara con cada valor WHEN.
  • 🔎 CASO buscado: Coloca una condición completa en cada cláusula WHEN y ejecuta la primera que sea verdadera.
  • 🧮 Cualquier tipo: El selector puede ser una variable, un número o una expresión aritmética.
  • 🛟 MÁS: El bloque ELSE opcional se ejecuta cuando no hay coincidencias alternativas.
  • 🔚 FIN DEL CASO: Un END CASE obligatorio cierra la instrucción.
  • 🗄️ Compatible con SQL: A diferencia de IF, CASE también se puede utilizar directamente dentro de las sentencias SQL.

Declaración de CASO en Oracle PL / SQL

¿Qué es una declaración CASE?

Una instrucción CASE es similar a la instrucción IF-THEN-ELSIF; selecciona una alternativa en función de una condición entre las opciones disponibles.

  • Una instrucción CASE utiliza un "selector" en lugar de una expresión booleana para elegir la secuencia.
  • El valor de la expresión en la instrucción CASE se trata como un selector.
  • La expresión puede ser de cualquier tipo (aritmética, con variables, etc.).
  • A cada alternativa se le asigna un valor predefinido (selector), y se ejecuta la alternativa cuyo valor de selector coincide con el valor de la expresión condicional.
  • A diferencia de IF-THEN-ELSIF, la declaración CASE también se puede utilizar en declaraciones SQL.
  • El bloque ELSE en una instrucción CASE contiene la secuencia que se ejecutará cuando no se seleccione ninguna de las alternativas.

Sintaxis

CASE (expression)
WHEN <value1> THEN action_block1;
WHEN <value2> THEN action_block2;
WHEN <value3> THEN action_block3;
ELSE action_block_default;
END CASE;
  • En la sintaxis anterior, la expresión devuelve un valor que puede ser de cualquier tipo.
  • Cada cláusula 'CUANDO' es una alternativa que tiene una y un .
  • Se selecciona la cláusula 'WHEN' cuyo valor coincide con la expresión, y su se ejecuta.
  • El bloque 'ELSE' es opcional y contiene la ejecutar cuando no haya coincidencias alternativas.
  • 'END' marca el final de la declaración CASE y es una parte obligatoria de CASE.

Ejemplo 1: Cálculo aritmético usando CASE

En este ejemplo, realizamos un cálculo aritmético entre dos números, 55 y 5.

DECLARE
a NUMBER := 55;
b NUMBER := 5;
arth_operation VARCHAR2(20) := 'MULTIPLY';
BEGIN
dbms_output.put_line('Program started.');
CASE (arth_operation)
WHEN 'ADD' THEN dbms_output.put_line('Addition of the numbers are: '|| a+b );
WHEN 'SUBTRACT' THEN dbms_output.put_line('Subtraction of the numbers are: '||a-b );
WHEN 'MULTIPLY' THEN dbms_output.put_line('Multiplication of the numbers are: '|| a*b );
WHEN 'DIVIDE' THEN dbms_output.put_line('Division of the numbers are:'|| a/b);
ELSE dbms_output.put_line('No operation action defined. Invalid operation');
END CASE;
dbms_output.put_line('Program completed.');
END;
/

Code Explicación

  • Code línea 2: Declarar la variable 'a' como 'NUMBER' e inicializarla con el valor '55'.
  • Code línea 3: Declarar la variable 'b' como 'NUMBER' e inicializarla con el valor '5'.
  • Code línea 4: Declarar la variable 'arth_operation' como 'VARCHAR2' de tamaño 20 e inicializarla con el valor 'MULTIPLY'.
  • Code línea 6: Imprimiendo el mensaje “Programa iniciado”.
  • Code línea 7: CASE comprueba el valor de la expresión. Aquí, el valor de 'arth_operation' es 'MULTIPLY', que se trata como el selector.
  • Code línea 10: La cláusula WHEN con valor 'MULTIPLY' coincide con el selector, por lo que el controlador selecciona este bloque de acción e imprime 'La multiplicación de los números es: 275'.
  • Code Línea 13: Marca el final de la instrucción CASE.
  • Code línea 14: Imprimiendo el mensaje “Programa completado”.

Code Resultado

Program started.
Multiplication of the numbers are: 275
Program completed.

Declaración del CASO BUSCADO

La instrucción CASE buscada es similar a la instrucción CASE, pero en lugar de usar un selector para elegir la alternativa, la CASE buscada tiene la condición definida directamente en la cláusula WHEN.

  • Se ejecuta la primera cláusula WHEN que satisface la condición, y el controlador omite las alternativas restantes.

Sintaxis

CASE
WHEN <expression1> THEN action_block1;
WHEN <expression2> THEN action_block2;
WHEN <expression3> THEN action_block3;
ELSE action_block_default;
END CASE;
  • En la sintaxis anterior, cada cláusula WHEN tiene una separada y .
  • Se ejecuta la cláusula WHEN para la cual la expresión devuelve TRUE.
  • El bloque 'ELSE' es opcional y contiene la ejecutar cuando ninguna de las alternativas se satisface.
  • 'END' marca el final de la declaración CASE y es una parte obligatoria de CASE.

Ejemplo 1: Cálculo aritmético utilizando CASE buscado

En este ejemplo, realizamos un cálculo aritmético entre dos números, 55 y 5.

DECLARE
a NUMBER := 55;
b NUMBER := 5;
arth_operation VARCHAR2(20) := 'DIVIDE';
BEGIN
dbms_output.put_line('Program started.');
CASE
WHEN arth_operation = 'ADD'
THEN dbms_output.put_line('Addition of the numbers are: '||a+b );
WHEN arth_operation = 'SUBTRACT'
THEN dbms_output.put_line('Subtraction of the numbers are: '|| a-b);
WHEN arth_operation = 'MULTIPLY'
THEN dbms_output.put_line('Multiplication of the numbers are: '|| a*b );
WHEN arth_operation = 'DIVIDE'
THEN dbms_output.put_line('Division of the numbers are: '|| a/b );
ELSE dbms_output.put_line('No operation action defined. Invalid operation');
END CASE;
dbms_output.put_line('Program completed.');
END;
/

Code Explicación

  • Code línea 2: Declarar la variable 'a' como 'NUMBER' e inicializarla con el valor '55'.
  • Code línea 3: Declarar la variable 'b' como 'NUMBER' e inicializarla con el valor '5'.
  • Code línea 4: Declarar la variable 'arth_operation' como 'VARCHAR2' de tamaño 20 e inicializarla con el valor 'DIVIDE'.
  • Code línea 6: Imprimiendo el mensaje “Programa iniciado”.
  • Code Línea 7: Comienza la instrucción CASE buscada. Las cláusulas para ADD, SUBTRACLas operaciones T y MULTIPLY se omiten, ya que sus condiciones no coinciden con el valor de 'arth_operation'.
  • Code línea 14: La expresión de la cláusula WHEN “arth_operation = 'DIVIDE'” se cumple y devuelve TRUE.
  • Code línea 15: Se ejecuta el bloque de acción de la cláusula WHEN y se imprime 'La división de los números es: 11'.
  • Code Línea 17: Marca el final de la instrucción CASE.
  • Code línea 18: Imprimiendo el mensaje “Programa completado”.

Code Resultado

Program started.
Division of the numbers are: 11
Program completed.

Comparación de CASO y CASO REGISTRADO

Ambas formas eligen una rama, pero difieren en cómo se selecciona dicha rama, como se resume a continuación.

Tipo Mareas Ideales para Lecciones Uso
CASE Similar a la SI-ENTONCES-ELSIF Declaración. Se utiliza un 'selector' para elegir la alternativa en lugar de una expresión booleana. Se utiliza para seleccionar entre varias alternativas mediante un selector.
CASO BUSCADO Una sentencia CASE sin selector real. En su lugar, contiene la condición (que se evalúa como VERDADERA o FALSA) que selecciona la alternativa. Solía ​​permitir elegir entre más de dos alternativas, principalmente en función de las condiciones del rango.

Preguntas Frecuentes

Una instrucción CASE simple compara un valor de selector con cada valor WHEN. Una instrucción CASE con búsqueda no tiene selector y evalúa una condición completa en cada WHEN, por lo que maneja rangos y pruebas compuestas.

Sí. Una expresión CASE puede aparecer en una cláusula SELECT, WHERE u ORDER BY, lo que supone una ventaja clave sobre IF-THEN-ELSIF, una estructura que solo funciona dentro de bloques PL/SQL.

Una instrucción CASE genera la excepción CASE_NOT_FOUND si no hay ninguna rama que coincida y no hay ningún ELSE presente. Agregar un ELSE, incluso una acción NULL vacía, evita este error en tiempo de ejecución.

Sí. Cuando las ramas comparan una expresión con valores fijos, la IA puede reescribir la cadena como un CASE más limpio. Verifica el resultado, ya que un CASE sin ELSE se comporta de manera diferente a uno sin ELSIF.

Una instrucción CASE ejecuta un bloque de acciones por cada rama y finaliza con END CASE. Una expresión CASE devuelve un único valor y finaliza con END, por lo que puede asignarse a una variable o utilizarse en SQL.

Resumir este post con: