El problema es el siguiente:
Estoy usando NH 1.0.3 con Oracle y cuando ejecuto un HQL me crea una
sentencia SQL con error. Al crear el SQL usa la funcion decode() y no
coloca el primer argumento con lo cual el provider del oracle lanza un
error (ORA: 00936 Falta una expresión)
La sentencia SQL es muy grande para enviarla completa pero paso la
parte con error:
select elementobu0_.IDELEMENTO as IDJERARQ1_,
decode( , "elementobu0__8_".IDMAESTRONEGOCIO , 8,) ....
Gracias!!!
--
Dario Quintana
http://blog.darioquintana.com.ar
A modo de explicación: Si no se entendió cual es el problema, intento
explicarlo nuevamente.
Al querer ejecutar una consulta HQL (Ej: From Alumno alum Where
alum.IdAlumno = 26) en ORACLE, cuando Nhibernate convierte (complila)
esta expresión y crea una equivalente para ejecutar en el motor de BD,
crea una sentencia SQL con error.
Este error se produce cuando utiliza la función decode() de Oracle
(que es una equivalente al case de MsSqlServer) ya que no coloca el
parametro correspondiente a condición. ( sintax: decode(<expresion a
evaluar>, {<valor a comparar>, <valor>}) )
En el ejemplo del Alumno, suponiendo que este herede de Persona, la
sentencia SQL que se ejecutaría en la BD seria algo así:
SELECT Alumno.IdAlumno as idAlum_, decode (Alumno.IdAlumno,
Persona.IdPersona, 2, Alumno.IdAlumno, 1 , 0) as clazz_,
Alumno.Legajo, Pesona.Nombre , Pesona.Apellido, Persona.Dni
>From Alumno, Persona
where Alumno.IdAlumno = Persona.IdPersona
and Alumno.IdAlumno = 26
El error se produce cuando arma "decode (<Aqui debería ir un campo>,
Persona.IdPersona, 2, Alumno.IdAlumno, 1 , 0) as clazz_"
Espero se entienda.
¿Alguien sabe como pasar este error para que sea corregido?
Gracias!!!
On 15 mar, 13:17, "Dario Quintana" <conta...@darioquintana.com.ar>
wrote:
> Ahí me mataste, ni idea :s
>
> Dario Quintanahttp://blog.darioquintana.com.ar- Ocultar texto de la cita -
>
> - Mostrar texto de la cita -
Bye.
Fabio.
Bueno... si lo logro y Sergey está de acuerdo a publicar las
modificaciones en la prox release, tendrán noticias.
Bye.
Fabio.
Fabio,
No he agregado nunca un error en el proyecto. Ya estoy registrado en
el Proyecto .
¿Agrego este error como un nuevo Issue?
Si es así ¿El tipo del Issue es Bug?
¿Que priordad te parece conveniente asignarle?
¿A que componente afecta esto (Contrib, Core, etc.)?
¿Debe ser expuesta estrictamente en Inglés o puedo agregarla en
Castellano?
Gracias.
Prueba usando el NHibernate.Dialect.OracleDialect en lugar que
NHibernate.Dialect.Oracle9Dialect.
Te recuerdo que en la HQL NO tenes que usar la sintaxis de ORACLE si no
que tenes que usar la sintaxis de HQL que, en este caso, corresponde a
la <case expression> de SQL92.
Con eso te tendría que funcionar; si no te funciona es que hay un bug en
NHibernate.SqlCommand.DecodeCaseFragment porque me da la impresión que
no está muy bien hecha.
Bye.
Fabio.
P.S. La sintaxis de <case expression> es
CASE WHEN <search expression> THEN <result expression> [[WHEN <search
expression> THEN <result expression>]...] [ELSE <result expression>]
Ejemplo:
CASE
WHEN propiedad > 60000 THEN 'A'
WHEN propiedad > 30000 THEN 'B'
ELSE 'C'