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

¿Qué es la declaración CASE?

Una declaración CASE es similar a una declaración IF-THEN-ELSIF que selecciona una alternativa según la condición entre las opciones disponibles.

  • La declaración CASE utiliza un "selector" en lugar de una expresión booleana para elegir la secuencia.
  • El valor de la expresión en la declaración CASE se tratará como un selector.
  • La expresión puede ser de cualquier tipo (aritmética, variables, etc.)
  • A cada alternativa se le asigna un determinado valor predefinido (selector), y se ejecutará la alternativa con un valor de selector que coincida 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 la instrucción CASE contiene la secuencia que debe ejecutarse cuando no se seleccionó ninguna de las alternativas.

Sintaxis

CASE (expression)
 WHEN <valuel> THEN action_blockl;
 WHEN <value2> THEN action_block2;
 WHEN <value3> THEN action_block3;
 ELSE action_block_default;
END CASE;
  • En la sintaxis anterior, la expresión devolverá un valor que podría ser de cualquier tipo (variable, número, etc.).
  • Cada cláusula 'CUÁNDO' se trata como una alternativa que tiene y .
  • Se seleccionará la cláusula 'WHEN' que coincida con el valor de la expresión y se ejecutará el correspondiente.
  • El bloque 'ELSE' es opcional y contiene el que debe ejecutarse cuando ninguna de las alternativas coincide con el valor de la expresión.
  • El 'FIN' marca el final de la declaración CASE y es una parte obligatoria del CASE.

Ejemplo 1: Cálculo aritmético usando caso

En este ejemplo, vamos a realizar 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;
/

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 '55'.
  • Línea de código 3: declarar la variable 'b' como tipo de datos 'NÚMERO' e inicializarla con el valor '5'.
  • Línea de código 4: Declarar la variable 'arth_operation' como tipo de datos 'VARCHAR2' de tamaño 20 e inicializarla con el valor 'MULTIPLY'.
  • Línea de código 6: Imprimir la declaración “Programa iniciado”.
  • Línea de código 7: CASE comprueba el valor de la expresión. En este caso, el valor de la variable 'arth_operation' es 'MULTIPLY'. Este valor se tratará ahora como un selector para esta declaración CASE.
  • Línea de código 10: La cláusula WHEN con valor 'MULTIPLY' coincide con el valor del selector, por lo tanto, el controlador seleccionará este action_block e imprimirá el mensaje 'La multiplicación de los números es: 275'.
  • Línea de código 13: marca el final de la declaración CASE.
  • Línea de código 14: Impresión de la declaración “Programa completado”.

Salida de código

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

Declaración del CASO BUSCADO

La declaración SEARCHED CASE es similar a la declaración CASE, en lugar de usar el selector para seleccionar la alternativa, SEARCHED CASE tendrá directamente la expresión definida en la cláusula WHEN.

  • Se ejecutará la primera cláusula WHEN que satisfaga la condición y el controlador omitirá las alternativas restantes.

Sintaxis

CASE
WHEN <expression1> THEN action_blockl; 
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 y separados.
  • Se ejecutará la cláusula WHEN para la cual la expresión devuelve VERDADERO.
  • El bloque 'ELSE' es opcional y contiene el que debe ejecutarse cuando ninguna de las alternativas satisface.
  • El 'FIN' marca el final de la declaración CASE y es una parte obligatoria de CASE.

Ejemplo 1: Cálculo aritmético utilizando el caso buscado

En este ejemplo, vamos a realizar 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;
/

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 '55'.
  • Línea de código 3: declarar la variable 'b' como tipo de datos 'NÚMERO' e inicializarla con el valor '5'.
  • Línea de código 4: Declarar la variable 'arth_operation' como tipo de datos 'VARCHAR2' de tamaño 20 e inicializarla con el valor 'DIVIDE'.
  • Línea de código 6: Imprimir la declaración “Programa iniciado”.
  • Línea de código 7: comienza la instrucción SEARCHED CASE. Se omite el código de la línea 8 a la línea 13 porque el valor del selector (ADD, SUBTRACT, MULTIPLY) no coincide con el valor de 'arth_operation'.
  • Línea de código 14: Se satisface la expresión de la cláusula WHEN “arth_operation = 'DIVIDE'” y la expresión devuelve VERDADERO.
  • Línea de código 15: Se ejecutará el bloque Action_block de la cláusula WHEN y se imprimirá el mensaje 'La división de los números es: 11'.
  • Línea de código 17: marca el final de la declaración CASE.
  • Línea de código 18: Imprimir la declaración “Programa completado”.

Salida de código

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

Resumen

TIPO DESCRIPCIÓN USO
CASE Similar a SI-ENTONCES-ELSIF declaración. Se utiliza un 'SELECTOR' para elegir las alternativas en lugar de una expresión booleana. Se utiliza para seleccionar entre varias alternativas usando 'SELECTOR'
CASO BUSCADO Declaración CASE sin 'SELECTOR' real. En cambio, contiene la condición real (que se evalúa como VERDADERO/FALSO) que seleccionará las alternativas. Solía ​​elegir entre más de dos alternativas mayoritariamente.