Publicado el Dejar un comentario

Quitar acentos mediante una consulta SQL en Oracle

Supongamos que queremos crear “slugs” para nuestras URLs con los nombres de productos que contienen acentos. Pero ¿que es un slug? Bueno, un slug es colocar el titulo de una página en una URL válida para que de el usuario con sólo verla se de una idea de el contenido que puede encontrar en esa página.

Supongamos que la página anuncia nuestro producto “Computadora Portátil Lenovo X72”; el slug para está página sería “computadora-portatil-lenovo-x72”. Por lo general los “slugs” no llevan acentos, por lo tanto necesitamos reemplazarlos por su vocal base (á por a en el ejemplo anterior) y los espacios por los guiones.

Para específicamente el ejemplo anterior, utilizaríamos una combinación de las funciones TRANSLATE para reemplazar los espacios y acentos y la función LOWER para convertir el texto a minúsculas así:  

select Lower(Translate(‘Computadora Portátil Lenovo X72’,’á ‘,’a-‘)) from SYS.Dual;

Daría como resultado:

computadora-portatil-lenovo-x72

La función TRANSLATE trabaja parecido a la función REPLACE con la diferencia que la primera, permite reemplazar distintos caracteres a la vez como se puede observar en el ejemplo anterior (los caracteres ‘á’ fueron reemplazados por ‘a’  y los espacios por guiones ‘-‘).

Si lo que queremos es hacer una consulta más general para reemplazar los acentos en cualquier cadena de caracteres, emplearíamos una consulta SQL como esta:

select Translate(‘José Ángel Méndez Zúñiga’,’ÁáÉéÍíÓóÚú’,’AaEeIiOoUu’) from Dual;

Lo que daría como resultado:

Jose Angel Mendez Zuñiga

Espero y les sea útil.

¡Hasta la próxima!

 

 

Publicado el Dejar un comentario

Error ORA-30036 al ejecutar SHRINK sobre una tabla

Después de borrar millones de registros de una gran tabla en Oracle y tratar de reclamar espacio de dicha tabla, el comando SHRINK SPACE no terminaba y marcaba el error:

ORA-30036: unable to extend segment by 8 in undo tablespace ‘UNDO’.

El tamaño de la tabla no era tan grande como el espacio reservado para el tablespace UNDO (aquí se almacenan los registros para hacer un rollback de una transacción), sin embargo se llenaba y marcaba el error mencionado.

Cuando se ejecuta la sentencia ALTER TABLE … SHRINK SPACE es necesario también tomar en cuenta el tamaño de los índices de la tabla. Así que la suma del tamaño de la tabla de la cual necesitaba reclamar espacio y el tamaño de todos sus índices, si que superaba el espacio del tablespace UNDO por eso lanzaba el error.

La solución, borrar todos los índices (DROP INDEX) de la tabla, reclamar el espacio (SHRINK SPACE) de la tabla y volver a crear los índices.

Espero y les sirva mi experiencia.

¡Saludos!

Publicado el Dejar un comentario

¿Vendes aplicaciones programadas con Java Oracle SE 8? Esto te interesa.

A partir del 2019, el uso no personal de desarrollos en Java SE 8 cambia de licencia comercial:

“Las actualizaciones públicas de la versión 8 de Oracle Java SE seguirán disponibles para uso personal e individual al menos hasta finales de 2020.

Las actualizaciones públicas de la versión 8 de Oracle Java SE que se lancen a partir de enero de 2019 no estarán disponibles para uso empresarial, comercial o de producción sin licencia comercial.”

Para más información y detalles visita: https://www.java.com/es/download/release_notice.jsp

La opción ¿ OpenJDK?