¿Qué es la declaración CASE?
Una sentencia CASE es similar a la sentencia IF-THEN-ELSIF que selecciona una alternativa basada en la condición de las opciones disponibles.
- La sentencia CASE usa 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 tratará como un selector.
- La expresión puede ser de cualquier tipo (aritmética, variables, etc.)
- A cada alternativa se le asigna un cierto valor predefinido (selector), y se ejecutará la alternativa con el valor del selector que coincida con el valor de la expresión condicional.
- A diferencia de IF-THEN-ELSIF, la sentencia CASE también se puede utilizar en sentencias 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)WHENTHEN action_blockl;WHEN THEN action_block2;WHEN 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 'WHEN' se trata como una alternativa que tiene
y . - Se seleccionará la cláusula 'WHEN' que coincide 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 'END' marca el final de la instrucción CASE, y es una parte obligatoria de CASE.
Ejemplo 1: cálculo aritmético con mayúsculas y minúsculas
En este ejemplo, vamos a hacer un cálculo aritmético entre dos números 55 y 5.
DECLAREa NUMBER :=55;b NUMBER :=5;arth_operation VARCHAR2(20) :='MULTIPLY’;BEGINdbms_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 'NUMBER' 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 'operación_art' como tipo de datos 'VARCHAR2' de tamaño 20 e inicializarla con el valor 'MULTIPLY'.
- Línea de código 6: Impresión de 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 'operación_art' es 'MULTIPLICAR'. Este valor se tratará ahora como un selector para esta instrucció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 son: 275'.
- Línea de código 13: marca el final de la instrucció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: 275Program completed.
Declaración de CASO BUSCADO
La sentencia SEARCHED CASE es similar a la sentencia 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:
CASEWHENTHEN action_blockl;WHEN THEN action_block2;WHEN THEN action_block3;ELSE action_block_default;END CASE;
- En la sintaxis anterior, cada cláusula WHEN tiene la
y el separados. - Se ejecutará la cláusula WHEN para la que la expresión devuelve TRUE.
- El bloque 'ELSE' es opcional y contiene el
que debe ejecutarse cuando ninguna de las alternativas satisface. - El 'END' marca el final de la instrucción CASE y es una parte obligatoria de CASE.
Ejemplo 1: Cálculo aritmético usando el caso buscado
En este ejemplo, vamos a hacer un cálculo aritmético entre dos números 55 y 5.
DECLARE a NUMBER :=55;b NUMBER :=5;arth_operation VARCHAR2(20) :='DIVIDE';BEGINdbms_output.put_line(‘Program started.' );CASEWHEN 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 'NUMBER' e inicializarla con el valor '55'.
- Línea de código 3: Declarar la variable 'b' como tipo de datos 'NUMBER' e inicializarla con el valor '5'.
- Línea de código 4: declarar la variable 'operación_art' como tipo de datos 'VARCHAR2' de tamaño 20 e inicializarla con el valor 'DIVIDIR'.
- Línea de código 6: Impresión de la declaración "Programa iniciado".
- Línea de código 7: Comienza la instrucción SEARCHED CASE. El código de la línea 8 a la línea 13 se omite ya que su valor de selector (AGREGAR, RESTA, MULTIPLICAR) no coincide con el valor de 'operación_art.
- Línea de código 14: La expresión de la cláusula WHEN "operación_art = 'DIVIDE'" se satisface y la expresión devuelve VERDADERO.
- Línea de código 15: Action_block de la cláusula WHEN se ejecutará 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 instrucción CASE.
- Línea de código 18: Impresión de la declaración "Programa completado".
Salida de código:
Program started.Division of the numbers are: 11Program completed.
Resumen
ESCRIBE | DESCRIPCIÓN | USO |
---|---|---|
CASO |
Similar a la instrucción IF-THEN-ELSIF. Se utiliza un 'SELECTOR' para elegir las alternativas en lugar de la expresión booleana. |
Se usa para seleccionar entre varias alternativas usando 'SELECTOR' |
CASO BUSCADO |
Sentencia CASE sin 'SELECTOR' real. En cambio, contiene la condición real (que se evalúa como VERDADERO / FALSO) que seleccionará las alternativas. |
Se utiliza para elegir entre más de dos alternativas en su mayoría. |