Es mostren els missatges amb l'etiqueta de comentaris oracle. Mostrar tots els missatges
Es mostren els missatges amb l'etiqueta de comentaris oracle. Mostrar tots els missatges

divendres, 14 de juny del 2013

Condicions a Oracle ignorant accents i majúscules

Moltes vegades succeeix que, en anar a escriure les condicions d'una consulta, aquestes es fan sobre camps de text que poden contenir accents, majúscules, minúscules, etc. i no es vol que aquests elements distorsionin els resultats.

Una opció (en ORACLE) és usar la funció translate.

Aquesta funció rep tres paràmetres:

  1. La cadena a tractar.
  2. Un conjunt de caractèrs a substituir.
  3. Els caràcters pels que substituir.
El que fa és, sobre la cadena a tractar, per cada ocurrència de (2), busca el caràcter que està a la mateixa posició de (3) i el canvia.



Exemple:


    SELECT nom
      FROM usuaris o
     WHERE TRANSLATE(UPPER(o.nom),'ÁÉÍÓÚÀÈÌÒÙÄËÏÖÜÂÊÎÔÛ','AEIOUAEIOUAEIOU')
      LIKE TRANSLATE(UPPER('%lluis%'),'ÁÉÍÓÚÀÈÌÒÙÄËÏÖÜÂÊÎÔÛ','AEIOUAEIOUAEIOU') ;

Aquesta consulta retorna les files que tenen el camp o.nom amb valors: lluis,lluís, Lluís, Lluïs, etc.

dijous, 23 de maig del 2013

Error 17002 d'Oracle desde Tomcat

Avui hem trobat un nou problema: en una aplicació executant-se sobre Tomcat 7, usant les llibreries de persistència EclipseLink, un cop fet loguin es quedava tot penjat.

Mirant el catalina.out hi havia els missatges:


[EL Info]: 2013-05-22 23:24:06.515--ServerSession(9509498)--EclipseLink, version: Eclipse Persistence Services - 2.3.2.v20111125-r10461 
[EL Info]: 2013-05-22 23:24:06.624--ServerSession(9509498)--file:/usr/local/apache-tomcat-7.0.40/webapps/BopGestioUsuaris/WEB-INF/classes/_BopGestioUsuarisPU login successful 
[EL Info]: 2013-05-22 23:39:34.411--UnitOfWork(27713589)--Communication failure detected when attempting to perform read query outside of a transaction. Attempting to retry query. Error was: Exception 
[EclipseLink-4002] (Eclipse Persistence Services - 2.3.2.v20111125-r10461): org.eclipse.persistence.exceptions.DatabaseExceptionInternal 
Exception: java.sql.SQLException: Excepción de E/S: Expiró el tiempo de conexión 
Error Code: 17002Call: SELECT COUNT(CODIENTITAT) FROM ENTITAT WHERE (? = ?)        bind => [2 parameters bound]Query: ReportQuery(referenceClass=Entitat sql="SELECT COUNT(CODIENTITAT) FROM ENTITAT WHERE (? = ?)").

Era un error curiós, ja que en reiniciar el Tomcat, funcionava durant una estona correctament.
Buscant informació, hem trobat que això és degut a un error de xarxa, ja que no és capaç de trobar el servidor de base de dades.

Solució: modificar el fitxer persistence.xml per a modificar la URL de connexió i especificar el nom complet del servidor.