Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » PostgreSQL »

postgres,oracle,hibernate,hql

Estas en el tema de postgres,oracle,hibernate,hql en el foro de PostgreSQL en Foros del Web. Buenos días. miren lo que pasa es que ando tratando de modificar una consulta la cual esta realizada para postgres (pruebas) y oracle(produccion) para cada ...
  #1 (permalink)  
Antiguo 20/02/2015, 13:44
 
Fecha de Ingreso: agosto-2011
Mensajes: 80
Antigüedad: 13 años, 2 meses
Puntos: 0
postgres,oracle,hibernate,hql

Buenos días.
miren lo que pasa es que ando tratando de modificar una consulta la cual esta realizada para postgres (pruebas) y oracle(produccion) para cada lenguaje existe una consulta la razon es una funcion de oracle(instr) que en postgres(position) es diferente lo que quiero hacer es dejar una sola consulta para los dos lenguajes entiendo que con HQL podria hacer eso alguien sabe como lo podria hacer:
Dejo las consultas para que la miren:
Código SQL:
Ver original
  1. --obtenerItemsCuotasNCOracle
  2.     SELECT
  3.     credit_reason,
  4.     credit_entry_type,
  5.     amount,
  6.     (
  7.         SELECT
  8.             invoice
  9.         FROM
  10.             tickets t
  11.         WHERE
  12.             invoice =:fac
  13.             AND bussinesdate =:fecha
  14.             AND t.ticket_date <=:hora
  15.     ),
  16.     substr(credit_invoice,POSITION('-' IN credit_invoice)+1),
  17.     business_unit,
  18.     credit_invoice
  19. FROM
  20.     ticketitems
  21. WHERE
  22.     ticket_key =:tique
  23.     AND credit_reason = 'INTER'
  24.     AND credit_invoice =:credit
Código SQL:
Ver original
  1. --obtenerItemsCuotasNCPostgres
  2.     SELECT
  3.     credit_reason,
  4.     credit_entry_type,
  5.     amount,
  6.     (
  7.         SELECT
  8.             invoice
  9.         FROM
  10.             tickets t
  11.         WHERE
  12.             invoice =:fac
  13.             AND bussinesdate =:fecha
  14.             AND t.ticket_date <=:hora
  15.     ),
  16.     substr(credit_invoice,POSITION('-' IN credit_invoice)+1),
  17.     business_unit,
  18.     credit_invoice
  19. FROM
  20.     ticketitems
  21. WHERE
  22.     ticket_key =:tique
  23.     AND credit_reason = 'INTER'
  24.     AND credit_invoice =:credit
el error es el siguiente:
Código Java:
Ver original
  1. org.hibernate.exception.SQLGrammarException: could not execute query
  2.     at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:67)
  3.     at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
  4.     at org.hibernate.loader.Loader.doList(Loader.java:2223)
  5.     at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2104)
  6.     at org.hibernate.loader.Loader.list(Loader.java:2099)
  7.     at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:378)
  8.     at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:338)
  9.     at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:172)
  10.     at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1121)
  11.     at org.hibernate.impl.QueryImpl.list(QueryImpl.java:79)
  12.     at integracion.alkosto.dao.CarteraDAO.obtenerItemsCuotasNC(CarteraDAO.java:184)
  13.     at integracion.alkosto.exportacion.ExportadorCartera.cargarRegistrosPagoInteresMora(ExportadorCartera.java:841)
  14.     at integracion.alkosto.exportacion.ExportadorCartera.cargarRegistrosPagoCuotas(ExportadorCartera.java:794)
  15.     at integracion.alkosto.exportacion.ExportadorCartera.cargarRegistros(ExportadorCartera.java:373)
  16.     at integracion.Invocador.carteraRegistro(Invocador.java:256)
  17.     at integracion.Invocador.invocarInterfaz(Invocador.java:93)
  18.     at integracion.Main.main(Main.java:24)
  19. Caused by: org.postgresql.util.PSQLException: ERROR: no existe la función instr()
  20.     at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:1548)
  21.     at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1316)
  22.     at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:191)
  23.     at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:452)
  24.     at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:351)
  25.     at org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:255)
  26.     at org.hibernate.jdbc.AbstractBatcher.getResultSet(AbstractBatcher.java:186)
  27.     at org.hibernate.loader.Loader.getResultSet(Loader.java:1787)
  28.     at org.hibernate.loader.Loader.doQuery(Loader.java:674)
  29.     at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236)
  30.     at org.hibernate.loader.Loader.doList(Loader.java:2220)
  31.     ... 14 more
  #2 (permalink)  
Antiguo 23/02/2015, 07:39
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 9 meses
Puntos: 360
Respuesta: postgres,oracle,hibernate,hql

Ahí ya tienes es un problema de persistencia.
Se nota en el error, que está jalando el driver de postgresql tratando de ejecutar la función INSTR.

Normalmente un ambiente de pruebas y uno de producción deben ser identicos, de lo contrario no tiene mucho sentido. Sin embargo, se me ocurre que desde java se identifique la IP que lo llama y si es la de pruebas, haga uso de la persistencia de postgresql con la consulta reemplazada por POSITION. Si es el de producción, que tome la persistencia de Oracle con la función INSTR.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming

Etiquetas: postgres, sql
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:40.