Oracle/PLSQL: sentencia CASE

Los datos expuestos en este blog, son solo de índole informativo. Por favor realiza siempre una copia de seguridad antes de realizar cualquier cambio en tu proyecto.

Oracle/PLSQL: sentencia CASE

Este tutorial de Oracle explica cómo usar Oracle/PLSQL declaración del caso Con sintaxis y ejemplos.

describir

La declaración CASE de Oracle/PLSQL tiene la funcionalidad de una declaración IF-THEN-ELSE. A partir de Oracle 9i, puede utilizar sentencias CASE en sentencias SQL.

sintaxis

La sintaxis de la instrucción CASE en Oracle/PLSQL es:

CASE [ expression ]

   WHEN condition_1 THEN result_1
   WHEN condition_2 THEN result_2
   ...
   WHEN condition_n THEN result_n

   ELSE result

END

parámetro o parámetro

La expresión es opcional. Este es el valor que está comparando con una lista de criterios. (es decir: condition_1, condition_2, … condition_n) condition_1, condition_2, … condition_n deben ser condiciones del mismo tipo de datos. Las condiciones se evalúan en el orden indicado. Una vez que se determina que la condición es verdadera, la declaración CASE devuelve el resultado y la condición no se evalúa más. result_1, result_2, … result_n Todos los resultados deben ser del mismo tipo de datos. Este es el valor devuelto una vez que se determina que la condición es verdadera.

devolver los bienes

La instrucción CASE devuelve cualquier tipo de datos, como cadenas, números, fechas, etc. (Pero todos los resultados deben ser del mismo tipo de datos en la instrucción CASE).
Se devuelve un error ORA-00932 si todas las condiciones son de diferentes tipos de datos.
Se devuelve un error ORA-00932 si todos los resultados son de diferentes tipos de datos.
Si no se encuentra que ninguna condición sea verdadera, la declaración CASE devuelve el valor en la cláusula ELSE.
Si se omite la cláusula ELSE y no se encuentra que ninguna condición sea verdadera, la instrucción CASE devolverá NULL.

notas

  • Puede haber hasta 255 comparaciones en una instrucción CASE.cada WHEN ... THEN Las cláusulas se consideran 2 comparaciones.

aplicar para

La declaración CASE se puede utilizar en las siguientes versiones de Oracle/PLSQL:

  • Oráculo 12c, Oráculo 11g, Oráculo 10g, Oráculo 9i

ejemplo

La instrucción CASE se puede utilizar en Oracle/PLSQL.

Puede usar la declaración CASE en una declaración SQL de la siguiente manera: (incluida la cláusula de expresión)

SELECT table_name,
CASE owner
  WHEN 'SYS' THEN 'The owner is SYS'
  WHEN 'SYSTEM' THEN 'The owner is SYSTEM'
  ELSE 'The owner is another value'
END
FROM all_tables;

O puede escribir la declaración SQL usando la declaración CASE de la siguiente manera: (omitiendo la cláusula de expresión)

SELECT table_name,
CASE
  WHEN owner="SYS" THEN 'The owner is SYS'
  WHEN owner="SYSTEM" THEN 'The owner is SYSTEM'
  ELSE 'The owner is another value'
END
FROM all_tables;

Las dos declaraciones CASE anteriores son equivalentes a las siguientes declaraciones IF-THEN-ELSE:

IF owner="SYS" THEN
   result := 'The owner is SYS';

ELSIF owner="SYSTEM" THEN
   result := 'The owner is SYSTEM'';

ELSE
   result := 'The owner is another value';

END IF;

La instrucción CASE compara el valor de cada propietario uno por uno.

Una cosa a tener en cuenta es que la cláusula ELSE en la instrucción CASE es opcional. Puedes omitirlo. Veamos la instrucción SQL anterior con la cláusula ELSE omitida.

Su declaración SQL se ve así:

SELECT table_name,
CASE owner
  WHEN 'SYS' THEN 'The owner is SYS'
  WHEN 'SYSTEM' THEN 'The owner is SYSTEM'
END
FROM all_tables;

Con la cláusula ELSE omitida, la declaración CASE devolverá NULL si la condición no se cumple.

Comparar 2 condiciones

Aquí hay un ejemplo de cómo usar la declaración CASE para comparar diferentes condiciones:

SELECT
CASE
  WHEN a < b THEN 'hello'
  WHEN d < e THEN 'goodbye'
END
FROM suppliers;

Preguntas frecuentes

Pregunta: ¿Puede crear una instrucción CASE que evalúe dos campos diferentes? Quiero devolver un valor basado en una combinación en dos campos diferentes.

Respuesta: Sí, aquí hay un ejemplo de una declaración de caso que evalúa dos campos diferentes.

SELECT supplier_id,
CASE
  WHEN supplier_name="IBM" and supplier_type="Hardware" THEN 'North office'
  WHEN supplier_name="IBM" and supplier_type="Software" THEN 'South office'
END
FROM suppliers;

Entonces, si el campo nombre_proveedor es IBM y el campo tipo_proveedor es Hardware, entonces la declaración CASE devolverá la oficina del Norte. Si el campo nombre_proveedor es IBM y el tipo_proveedor es Software, la instrucción CASE devolverá Oficina Sur.