Mira: primera vez en mi vida que escucho sobre jpql y jpa, así que me
puse a googlear y encontré esto a ver si te sirve:
[1]http://forums.sun.com/thread.jspa?messageID=10003566
Y lo que le pregunte a google fue:
http://www.google.com.py/search?hl=es&safe=off&q=JPA+jpql+is+null&btnG=Buscar&lr=
Me parece que tiene algo que ver en que parte de la consulta utilizas
esa función, en el where o en el select, podrias dar un ejemplo?
Un abrazo....
--
§~^Calabaza^~§ from Villa Elisa, Paraguay
Mira también esto, a lo mejor te sirve:
[2]http://edocs.bea.com/kodo/docs40/full/html/ejb3_langref.html#ejb3_langref_null
podrias hacer algo como:
Select E from empleados E
where E.codempleado = 2 OR E.codempleado is null
Depende donde lo estes usando.
Saludos
Hugo.
2008/8/21 John Arevalo <johna...@gmail.com>:
Pero,
Select E from empleados E
where E.codempleado = null OR E.codempleado is null
estas poniendo lo mismo de ambos lados, el = null -aparentemente- se
reemplaza por IS NULL.
Saludos.
2008/8/21 Roxi <Roxana....@gmail.com>:
2008/8/21 Roxi <Roxana....@gmail.com>:
> el problema que estoy
> teniendo es que tengo que pasar mis consultas de SQL a este lenguaje
> JPQL y no se como simular en este lenguaje de consultas el
> tabla.campo = NVL(?, tabla.campo), el nvl es el que se usa en Oracle y
> lo que hace es que si el valor viene nulo, entonces se toma el valor
> del segundo argumento, pero si no viene nuelo como este caso
> tabla.campo = NVL(2, tabla.campo), se va a traer todos los datos donde
> tabla.campo se igual a 2.
> para ser mas especifica tengo como ejemplo lo sgte:
> Select E from empleados E
> where E.codempleado = NVL(null, E.codempleado)
Hagamos esto con datos a ver que necesitas que devuelva:
Empleados
codempleado - nombre
1 - aaaaa
2 - bbbbb
3 - ccccc
4 - ddddd
Según esta consulta qué debe devolver cuando e.codeempleado es null?:
> Select E from empleados E
> where E.codempleado = NVL(null, E.codempleado)
asi como esta escrito debe devolver:
Error...
Corrigiendo tu consulta, quizás quedaría así?:
> Select E.* from empleados E
> where E.codempleado = NVL(E.codempleado, E.codempleado)
Corregí de esta forma tu consulta porque he buscado ayuda sobre la
sintaxis de nvl() y he visto aqui[1] y aqui también[2]
[1]http://www.techonthenet.com/oracle/functions/nvl.php
[2]http://download.oracle.com/docs/cd/B28359_01/olap.111/b28126/dml_functions_2048.htm
Que dice:
[1]"In Oracle/PLSQL, the NVL function lets you substitute a value when
a null value is encountered.
The syntax for the NVL function is:
NVL( string1, replace_with )
string1 is the string to test for a null value.
replace_with is the value returned if string1 is null."
En Oracle/PLSQL, la función NVL le permite a Ud sustituir un valor
cuando se encuentra un valor de null.
La sintaxis para la función NVL es:
NVL(cadena1, reemplazar_con )
cadena1 es la cadena que se evaluará para ver si es un valor null.
reemplazar_con es el valor a ser retornado si cadena1 es null.
O sea que estas mal utilizando la funcion nvl() o copiaste mal el
ejemplo, si puedes ser más precisa te lo agradeceríamos.
> pero esto me produce un error porque no encuentra lo que es NVL,
> entonces lo he probado de las sgtes formas:
> Select E from empleados E
> where E.codempleado = Is Null (null, E.codempleado)
y aquí posiblemente si la idea es legar a comparar E.codempleado =
E.codempleado te daría otro error que puedes ir mirando en:
[3]http://forums.oracle.com/forums/message.jspa?messageID=2632098
Y también hay sobre lo que algunos ya te dijeron:
[4]http://forums.oracle.com/forums/thread.jspa?threadID=695515&tstart=0
El día 21 de agosto de 2008 11:47, Hugo Arregui
<hugo.a...@gmail.com> escribió:
> tal vez JPQL no defina un NVL.. (solo lo he visto en oracle)
>
> podrias hacer algo como:
>
> Select E from empleados E
> where E.codempleado = 2 OR E.codempleado is null
>
> Depende donde lo estes usando.
>
> Saludos
>
> Hugo.
El 2008/8/21 Roxi <Roxana....@gmail.com>:
> Si me parece muy buena solucion, Si no fuera que o que viene por
> argumento fuera un null, porque generarlmente cuando es null
> NVL(null,tabla.campo)
> se toma esntonces el segundo argumento. y cuando
> se ejecutan estas consultas y no viene nada se manda la palabra null,
> la cual la entiende oracle y toma el valor del segundo argumento .,
bueno, aquí ya no te entiendo, podrías hacer mención cuando es un valor null?
y cual es el nombre de la variable de la cadena que es evaluada con el nvl()?
> gueno cualquiera diria no mandes null, manda otras cosas , pero he ahi
> el detalle son todas las consultas de un sistema que se hizo para
> ejecutar sus consultas en Oracle y cambiarlos no resulta tan sencillo
> =P.. Gracias por tu respuesta
> entonces tendria como resultado la sgte consulta.
> Select E from empleados E
> where E.codempleado = null OR E.codempleado is null
> lo cual la heramienta JPA Query TooL me tira el sgte error:
> unexpected token [null].
> Internal Exception: line 1:51: unexpected token: null
La descripción del error te dice que no se esperaba el token (palabra
reservada?) null porque imagino que necesita el nombre de una variable
para utilizarla con el operador =
Creo que "traduciste mal" el comportamiento de la funcion NVL()
Mira esto:
Select E.* from empleados E
where E.codempleado = tu_variable OR E.codempleado is null
Esto es lo mismo que te dijo Hugo en su respuesta....
Amigos: este es el hilo mas difícil de seguir de mi vida, a ver si me ubico....
(recién reviso el correo) (les sugeriría utilizar algunas normas
básicas como no al top posting y dejar todos los mensajes al
responder, a fin de que el que lee pueda ubicarse con solo leer el
ultimo mensaje, pero es solo una sugerencia, ya estoy muy mareado de
revisar tanto toda la conversación ;)
Roxi: disculpas si no soy tan claro. :)
A todos un abrazo.