viernes, 4 de junio de 2010

Comillas en cadenas en Oracle - Operador q

Cuando trabajamos con bases de datos Oracle, el carácter comilla simple ( ' ) es utilizado como delimitador de cadenas de texto. No es raro encontrarnos con la necesidad de utilizar una cadena que contenga este carácter, y para estos casos podemos utilizar una solución muy simple, que consiste en duplicar la comilla para que sea interpretada como parte de la cadena, y no como delimitador:

'El carácter ' delimita las cadenas', sería interpretado como una cadena 'El carácter ', y el resto se tomaría como comandos, por lo que tendríamos un error.
'El carácter '' delimita las cadenas', al duplicar la comilla, Oracle la interpretará como un carácter, e interpretaría la cadena: 'El carácter ' delimita las cadenas'.

Esta es la solución más conocida, pero existe una alternativa, que es la utilización del operador q (como siempre del inglés, quote). Este operador permite indicar que las comillas de la cadena a la que se aplica son texto, y no delimitadores. Su utilización sigue el formato: q'd cadena d', donde d es un delimitador, para el que se pueden usar cualquier carácter (he probado con números, letras y signos de puntuación, y todos son válidos), aunque lo normal es utilizar #, [] o {}, para mayor legibilidad.

Dos formas equivalentes de obtener una cadena con el nombre entre comillas:


select 'La persona ''' || nombre || ''' seleccionada' from persona;
select q'{La persona '}' || nombre || q'{' seleccionada}' from persona;

¡A cual más clara!

3 comentarios:

Cualquier aportación será bienvenida