Las funciones comunes se utilizan para manejar valores NULL en una base de datos. El propósito de las funciones de manejo NULL genéricas es reemplazar los valores NULL con un valor alternativo. Echaremos un vistazo rápido a estas caracterÃsticas a continuación.
La función NVL reemplaza NULL con un valor alternativo.
NVL( Arg1, replace_with )
Ambos parámetros son obligatorios en la sintaxis. Tenga en cuenta que la función NVL funciona con todos los tipos de datos. Y también que el tipo de datos de la cadena original y el reemplazo deben estar en un estado compatible, es decir, ser el mismo o implÃcitamente convertible por Oracle.
Si arg1 es un valor de carácter, Oracle convierte la cadena de reemplazo en un tipo de datos compatible con arg1 antes de compararlos y devuelve VARCHAR2 en el juego de caracteres expr1. Si arg1 es numérico, Oracle determina el argumento con la prioridad numérica más alta, convierte implÃcitamente el otro argumento a este tipo de datos y devuelve ese tipo de datos.
La instrucción SELECT a continuación mostrará «n / a» si el empleado aún no ha sido asignado a ninguna tarea, es decir. JOB_ID es NULL. De lo contrario, se mostrará el JOB_ID real.
SELECT first_name, NVL(JOB_ID, 'n/a') FROM employees;
Como una mejora con respecto a NVL, Oracle introdujo una función para reemplazar el valor no solo para los valores de columna NULL, sino también para las columnas NOT NULL. La función NVL2 se puede utilizar para reemplazar un valor NULL alternativo, asà como un valor no NULL.
NVL2( string1, value_if_NOT_null, value_if_null )
La instrucción SELECT a continuación mostrará «Bench» si el JOB_CODE del empleado es NULL. Para un valor de CÓDIGO DE TRABAJO especÃfico distinto de cero, se mostrará un valor de Trabajo asignado fijo.
SQL> SELECT NVL2(JOB_CODE, 'Job Assigned', 'Bench') FROM employees;
La función NULLIF compara los dos argumentos expr1 y expr2. Si expr1 y expr2 son iguales, se devuelve NULL; de lo contrario, devuelve expr1. A diferencia de la otra función de manejo NULL, el primer argumento no puede ser NULL.
NULLIF (expr1, expr2)
Tenga en cuenta que el primer argumento puede ser una expresión que se evalúe como NULL, pero no puede ser literal NULL. Ambos parámetros son necesarios para que se ejecute la función.
La consulta siguiente devuelve NULL porque ambos valores de entrada, 12, son iguales.
SELECT NULLIF (12, 12) FROM DUAL;
Del mismo modo, la consulta siguiente devuelve «SUN» porque ambas cadenas no son iguales.
SELECT NULLIF ('SUN', 'MOON') FROM DUAL;
La función COALESCE, una forma más general de NVL, devuelve la primera expresión distinta de cero en una lista de argumentos. Se requieren un mÃnimo de dos parámetros obligatorios, pero no hay un número máximo de argumentos.
COALESCE (expr1, expr2, ... expr_n )
Considere la siguiente consulta SELECT. Selecciona el primer valor distinto de cero introducido en los campos de dirección del empleado.
SELECT COALESCE (address1, address2, address3) Address FROM employees;
Curiosamente, el trabajo de la función COALESCE es similar a la construcción IF..ELSIF..ENDIF. La consulta anterior se puede reescribir como:
IF address1 is not null THEN result := address1; ELSIF address2 is not null THEN result := address2; ELSIF address3 is not null THEN result := address3; ELSE result := null; END IF;
Oracle proporciona funciones condicionales DECODE y CASE para condicionalizar incluso en una declaración SQL.
La función es el equivalente SQL de la instrucción de procedimiento condicional IF..THEN..ELSE. DECODE trabaja con valores / columnas / expresiones de todos los tipos de datos.
DECODE (expression, search, result [, search, result]... [, default])
La función DECODIFICAR compara la expresión con cada valor de búsqueda en orden. Si existe igualdad entre la expresión y el argumento de búsqueda, se devuelve un resultado apropiado. Si no se encuentra ninguna coincidencia, se devuelve el valor predeterminado si se especifica, de lo contrario, NULL. En el caso de una discrepancia de compatibilidad de cualquier tipo, Oracle realiza internamente una posible conversión implÃcita para devolver los resultados.
De hecho, Oracle considera que dos ceros son equivalentes cuando se trata de la función DECODE.
SELECT DECODE(NULL,NULL,'EQUAL','NOT EQUAL') FROM DUAL; DECOD ----- EQUAL
Si expresión es cero, Oracle devuelve el resultado de la primera búsqueda, que también es cero. El número máximo de componentes en la función DECODIFICAR es 255.
SELECT first_name, salary, DECODE (hire_date, sysdate,'NEW JOINEE','EMPLOYEE') FROM employees;
Las expresiones CASE siguen el mismo concepto que DECODE, pero difieren en sintaxis y uso.
CASE [ expression ] WHEN condition_1 THEN result_1 WHEN condition_2 THEN result_2 ... WHEN condition_n THEN result_n ELSE result END
La búsqueda de Oracle comienza desde la izquierda y se mueve hacia la derecha hasta que encuentra una condición verdadera y luego devuelve su expresión de resultado asociada. Si no se encuentra ninguna condición que sea verdadera y existe una cláusula ELSE, Oracle devuelve el resultado especificado con else. De lo contrario, Oracle devuelve nulo.
El número máximo de argumentos en una expresión CASE es 255. Todas las expresiones cuentan para este lÃmite, incluida la expresión inicial de una expresión CASE simple y una expresión ELSE opcional. Cada par de CUANDO … ENTONCES cuenta como dos argumentos. Para evitar exceder este lÃmite, puede anidar expresiones CASE para que return_expr en sà sea una expresión CASE.
SELECT first_name, CASE WHEN salary < 200 THEN 'GRADE 1' WHEN salary > 200 AND salary < 5000 THEN 'GRADE 2' ELSE 'GRADE 3' END CASE FROM employees; ENAM CASE ---- ------- JOHN GRADE 2 EDWIN GRADE 3 KING GRADE 1
🚫