sql >> Base de Datos >  >> RDS >> Oracle

Declaración de caso de Oracle explicada con consejos y ejemplos

Hemos visto el funcionamiento del procesamiento de Oracle Decode en la publicación anterior

Procesamiento de decodificación Oracle sql

Ahora veamos el procesamiento de sentencias de Oracle Case

Declaración de caso en Oracle

Es similar a la sentencia Decode. Las bases de datos anteriores a Oracle 8.1.6 solo tenían la función DECODE. CASE se introdujo en Oracle 8.1.6 como una función estándar, más significativa y más poderosa.

Todo lo que DECODE puede hacer, CASE también. Sin embargo, hay mucho más que CASE puede hacer, que DECODE no puede. Veremos ejemplos detallados en este artículo

Comencemos con la sintaxis de la sentencia Case

CASE [expression]

when condition_1 then value_1
when condition_2 then value_2
when condition_2 then value_2
….

else value_n
end

la expresión es opcional

Podemos dividir la declaración de caso en dos categorías Declaración de caso simple y declaración de caso de búsqueda

La declaración de caso simple es como la función de decodificación.

Ejemplo con instrucción CASE simple

select
case
region
when ‘N’ then ’North’
when ‘S’ then ’South’
when ‘E’ then ’East’,
when ‘W’ then ’West’
else ‘UNKNOWN’
end
from
customer;

La declaración de caso que se puede buscar es una declaración de caso donde especificamos una condición o predicado (declaración de caso en Oracle con múltiples condiciones)

SQL> select emp_name
, case
when Salary < 10000
then 'Junior Level'
when (Salary >=10000 and Salary < 50000)
then 'Middle Level'
when (Salary >= 50000 and Salary < 100000)
then 'Senior Level'
else 'Managers'
end Emp_level
from employee_info
where rownum < 5;

EMP_NAME EMP_LEVEL
---------- ---------
JOHN Junior Level
DON Senior Level
BOB Manager
BILL Middle Level

Declaración de caso de Oracle anidado

Esta es una declaración de caso dentro de la declaración de caso

SQL> select emp_name
, case
when Salary < 10000
then 'Junior Level'
when (Salary >=10000 and Salary < 50000)
then 'Middle Level'
when (Salary >= 50000 and Salary < 100000)
then 'Senior Level'
else  (Case when grade ='20'  then 'Vice President'
when grade='21'  then 'Senior Vice President'
else 'Manager'
End)
end Emp_level
from employee_info
where rownum < 5;

Puntos importantes sobre la declaración de caso simple y buscable

(1) El CASE buscado evalúa las condiciones de forma independiente en cada una de las opciones de "cuándo". Con esta estructura, se pueden implementar condiciones mucho más complejas con un CASO buscado que con un CASO simple.

(2) Un CASO buscado puede combinar múltiples pruebas usando varias columnas, comparaciones y operadores AND/OR.

(3) Tanto las construcciones CASE simples como las buscadas, las condiciones se evalúan secuencialmente de arriba a abajo y la ejecución finaliza después de encontrar la primera coincidencia. Entonces, suponga que más de una condición es verdadera, solo se considera la primera acción.

(4) Oracle Database utiliza evaluación de cortocircuito. Es decir, para una expresión CASE simple, la base de datos evalúa cada valor de comparación_expr solo antes de compararlo con expr, en lugar de evaluar todos los valores de comparación_expr antes de comparar cualquiera de ellos con expr. En consecuencia, Oracle nunca evalúa una expresión_comparación si una expresión_comparación anterior es igual a expr. Para una expresión CASE buscada, la base de datos evalúa cada condición para determinar si es verdadera y nunca evalúa una condición si la condición anterior era verdadera

Ahora veamos la diferencia entre la instrucción Case y Decode

(1) DECODE solo puede funcionar con valores escalares, pero CASE puede funcionar con operadores lógicos, predicados y subconsultas de búsqueda.

Sabemos que la decodificación puede funcionar con valores escalares. No podemos usarlo para operadores lógicos. Tenemos que convertirlo en valores escalares para hacer uso de eso.

Case facilita todo el proceso. Podemos usar fácilmente el operador lógico en la instrucción Case

SQL> select city
, case
when population < 100000
then 'Tier I'
when (population >=100000 and population < 200000)
then 'Tier II'
when (population >= 200000 and population < 300000)
then 'Tier III'
else 'TIER IV'
end City_Tier
from city_info
where rownum < 5;

CITY CITY_TIER
---------- ---------
XYX TIER I
XYZ TIER II
XZW TIER II

Lo anterior se llama declaraciones de casos que se pueden buscar

(2) CASE puede funcionar como una construcción PL/SQL pero DECODE solo se usa en sentencias SQL. CASE se puede usar como parámetro de una función/procedimiento.

Ejemplo

DECLARE

V_x VARCHAR2(10) := 'A';
V_y VARCHAR2(10);

BEGIN

V_y := CASE V_x
WHEN 'A' THEN 'Excellent'
WHEN 'B' THEN 'Good'
WHEN 'C' Then 'Average'
ELSE 'Poor'
END;

DBMS_OUTPUT.PUT_LINE(
'Grade V_x is '||V_y||'.'
);

END;
/

Grado V_x es Excelente.

(3) CASE espera consistencia del tipo de datos, DECODE no.

select case 5 when 1 then '1'
2 when '2' then '2'
3 else '5'
4 end
5 from dual;
when '2' then '2'
*
ERROR at line 2:
ORA-00932: inconsistent datatypes: expected NUMBER got CHAR

(4) CASE cumple con ANSI SQL. DECODE es propiedad de Oracle.

(5) CASE se ejecuta más rápido en el optimizador que DECODE.

(6) CASE es una sentencia mientras que DECODE es una función.

Artículos relacionados
Tutoriales de Oracle sql:lista de todas las lecciones de tutoriales de sql que se pueden usar para dominar sql y usar en RDBMS (Oracle, MySql) gestión y manipulación de datos
Preguntas de la entrevista de Oracle:consulte esta página para ver las 49 principales Preguntas y respuestas de la entrevista de Oracle:conceptos básicos, Oracle SQL para ayudarlo en las entrevistas.
registros PLSQL de Oracle:consulte este artículo sobre el funcionamiento de los registros PLSQL de Oracle. Además, descubra las diversas formas de definirlo y asignarle valor
Herramienta para desarrolladores de Oracle SQL:Consulte esta página para obtener toda la información sobre la herramienta para desarrolladores de Oracle sql, Cómo hacer la descarga para desarrolladores de Oracle sql, cómo instalar
Funciones de fecha de Oracle:consulte esta publicación para conocer las funciones de fecha de Oracle, la diferencia de fecha de Oracle en años, la diferencia de fecha de Oracle en días, la diferencia de fecha de Oracle en meses.
https://docs.oracle.com/cd /B19306_01/server.102/b14200/expresiones004.htm

Cursos recomendados

Aquí está el buen curso de Udemy para Oracle SQL
Oracle-Sql-Step-by-step:este curso cubre sql básico, uniones, creación de tablas y modificación de su estructura, creación de vistas, unión, unión, todo y mucho más. . Un gran curso y un curso imprescindible para principiantes de SQL
El curso completo de certificación de Oracle SQL :Este es un buen curso para cualquier persona que quiera estar preparado para trabajar con habilidades de desarrollador de SQL. Un buen curso explicado
Oracle SQL Developer:fundamentos, consejos y trucos :muchos desarrolladores utilizan la herramienta de desarrollo Oracle Sql. Este curso nos brinda trucos y lecciones sobre cómo usarlo de manera efectiva y convertirnos en un desarrollador sql productivo
Oracle SQL Performance Tuning Masterclass 2020 :El ajuste del rendimiento es una de las habilidades críticas y más buscadas. Este es un buen curso para aprender sobre esto y comenzar a realizar ajustes de rendimiento de sql