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