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.