FOROS DE INFORMATICA
Noticias: Realizada migración del foro, si tienen problemas con alguna imagen reportar al administrador
 
*
Bienvenido(a), Visitante. Por favor, ingresa o regístrate.
¿Perdiste tu email de activación?
Julio 06, 2020, 12:16:10


Ingresar con nombre de usuario, contraseña y duración de la sesión


Páginas: [1]
  Imprimir  
Autor Tema: Qué hago mal?  (Leído 17758 veces)
deivid_bfmv
Nuevo
*

Karma:0
Desconectado Desconectado

Mensajes: 29


« : Marzo 23, 2010, 05:49:20 »


Bueno mi duda es la siguiente:

Tenemos una tabla llamada employees con con distintos campos, en este caso los que nos importan son last_name y commission_pct (referentes a los empleados). Lo que quiero hacer es mostrar el last_name y las comisiones de los empleados  (commission_pct) pero si un empleado en el campo commission_pct tiene algun valor nulo, quiero que en vez de no salir nada, que salga No Commission. Es decir que para hacer esto hay que usar la funcion NVL o NVL2. Lo que yo he puesto es lo siguiente:

select last_name, NVL2(commission_pct,commission_pct,'No Commission') from employees;

En principio con el NVL2 que he usado lo que le digo es que si, el valor de commission_pct es nulo que me salga No Commission, y si el valor NO es nulo, que me salga el valor de commission_pct correspondiente..

Sin embargo me da el siguiente error:
ERROR en línea 1:
ORA-01722: número no válido

A que se debe? He estado mirando pero no consigo solucionarlo, alguien que entienda puede ayudarme?

Saludos y gracias Wink
En línea

Etereo
Global Moderator
Habitante
*****

Karma:9
Desconectado Desconectado

Mensajes: 2374



« Respuesta #1 : Marzo 24, 2010, 09:15:37 »

Hola, ésta es la nomenclatura de NVL2,

NVL2( string, value_if_NOT_null, value_if_null )

El campo commission_pct qué tipo de campo es? numérico o cadena? Si es númerico haz una conversión a cadena.

Un saludo
En línea

empecemosDeNuevo
Visitante
« Respuesta #2 : Diciembre 03, 2010, 12:33:11 »

select last_name, decode(commission_pct,null,'No Commission',commission_pct) from employees;

Con nvl el valor que le des por defecto tiene que ser del mismo tipo que el tipo con el que has definido commission_pct, que por lo que dices intuyo que es number, entonces al poner un varchar te dice que nanai, que le tienes que meter un valor numérico. Yo pondría:

select last_name,nvl(commission_pct,null,0) from employees;

Así si tienes que hacer cálculos de sumar comisión con salario te funciona, porque poniendo 'No Commission' al hacer operaciones aritméticas te va a dar el mismo error: is not a number.

En línea
Xesca
Senior
***

Karma:0
Desconectado Desconectado

Mensajes: 135



« Respuesta #3 : Junio 03, 2011, 09:18:30 »

Buenos días, acabo de registrarme y hechando un ojo al foro me encontre con este post. bueno la verdad esque viendo asi el tema por encima, pienso que el error que tienes es que estas usando mal la funcion NVL.

Se usa de la siguiente manera:

NVL(eExpression1, eExpression2)

Valores devueltos

Character, Date, DateTime, Numeric, Currency, Logical o valor nulo
Parámetros

eExpression1, eExpression2
    NVL( ) devuelve eExpression2 si eExpression1 se evalúa como un valor nulo. NVL( ) devuelve eExpression1 si eExpression1 no es un valor nulo. eExpression1 y eExpression2 pueden ser cualquier tipo de datos. NVL( ) devuelve .NULL. si tanto eExpression1 como eExpression2 se evalúan como el valor nulo.

Espero que con esta respuesta, se solucione tu problema.
La funcion NVL2 nunca la he utilizado y no puedo decirte si funciona con mas de dos valores.

Si necesitas un ejemplo de NVL puedes pedirlo.

¡¡Saludos!!
En línea
Páginas: [1]
  Imprimir  
 
Ir a:  

Impulsado por MySQL Impulsado por PHP Powered by SMF 1.1.13 | SMF © 2006-2009, Simple Machines LLC

XHTML 1.0 válido! CSS válido! Dilber MC Theme by HarzeM