Función CHR de Oracle

Una de las presentaciones que disfruté en los Días de capacitación 2010 de Rocky Mountain Oracle Users Group (RMOUG) fue la presentación de Stephen Jackson "Uso de SQL para generar SQL". He usado algunas de las técnicas que discutió en su presentación para que SQL genere SQL, pero una cosa que no había pensado en hacer era usar la función CHR para hacer que los scripts fueran más legibles. Aunque esta publicación se centra en el uso de la implementación de la función de cadena CHR de Oracle, otras bases de datos también admiten la función CHR (o CHAR).

Un ejemplo de la utilidad de CHR es la creación de resultados que incluyen caracteres que son significativos en la propia consulta. El uso apropiado de CHR permite al desarrollador de SQL evitar la necesidad de escapar de estos caracteres con significado de sintaxis de consulta. Por ejemplo, para imprimir los apellidos de los empleados en el esquema de muestra de recursos humanos de Oracle con comillas simples alrededor de los apellidos, se podría escribir una consulta como esta:

select '''' || last_name || '''' from employees; 

Las cuatro comillas simples escapan con éxito de las comillas antes y después del apellido. Desafortunadamente, puede resultar fácil perderse entre las comillas, especialmente para consultas más complejas. Debido a que el código decimal ASCII de 39 produce una comilla simple cuando se pasa a CHR, la expresión CHR(39)se puede usar en su lugar como se muestra a continuación:

select CHR(39) || last_name || CHR(39) from employees; 

Para mí, esto es más legible. Del mismo modo, se pueden representar caracteres aún más difíciles con la función CHR. Por ejemplo, Stephen señaló en su presentación que CHR (10) puede usarse para tener una nueva línea impresa en la salida.

Una de las ideas interesantes que discutió Stephen fue el uso de un script simple para mostrar las diversas representaciones de caracteres disponibles a través de la función CHR. Siempre se puede hacer referencia a un recurso como el gráfico ASCII de Tech on the Net o asciitable.com, pero es interesante simplemente mostrar las representaciones a través del código:

-- displayCHR.sql -- -- Display the characters associated with basic and extended ASCII codes. -- SET head off SET pagesize 0 SET linesize 120 SET trimspool on SET feedback off SET verify off SET serveroutput on size 5000 BEGIN FOR i IN 32..255 loop Dbms_output.put_line(i || ' ' || chr(i)); END loop; END; / 

El fragmento de código anterior, cuando se ejecuta en SQL * Plus, mostrará una gran cantidad de caracteres disponibles en el conjunto de caracteres ASCII básico y extendido. Se puede utilizar el comando spool para enviar la salida a un archivo. En mi máquina basada en Windows, incluso pude ver estos símbolos generados en el archivo de salida en cola usando la aplicación básica del Bloc de notas.

Conclusión

Como señaló Stephen en su presentación, la función CHR puede hacer que los scripts SQL * Plus sean más legibles y fáciles de mantener.

Esta historia, "Oracle CHR Function" fue publicada originalmente por JavaWorld.