Fonction Oracle CHR

L'une des présentations que j'ai appréciées lors des journées de formation du Rocky Mountain Oracle Users Group (RMOUG) 2010 était la présentation de Stephen Jackson «Utilisation de SQL pour générer du SQL». J'ai utilisé certaines des techniques dont il a parlé dans sa présentation pour que SQL génère du SQL, mais une chose à laquelle je n'avais pas pensé était d'utiliser la fonction CHR pour rendre les scripts plus lisibles. Bien que cet article se concentre sur l'utilisation de l'implémentation de la fonction de chaîne CHR d'Oracle, d'autres bases de données prennent également en charge la fonction CHR (ou CHAR).

Un exemple de l'utilité de CHR est la création de résultats qui incluent des caractères significatifs dans la requête elle-même. L'utilisation appropriée de CHR permet au développeur SQL d'éviter d'avoir à échapper ces caractères avec une signification de syntaxe de requête. Par exemple, pour imprimer les noms des employés dans l'exemple de schéma RH d'Oracle avec des guillemets simples entourant les noms de famille, on peut écrire une requête comme celle-ci:

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

Les quatre guillemets simples ont réussi à échapper aux guillemets avant et après le nom de famille. Malheureusement, il peut devenir facile de se perdre dans les guillemets, en particulier pour les requêtes plus complexes. Étant donné que le code décimal ASCII de 39 produit un guillemet simple lorsqu'il est passé à CHR, l'expression CHR(39)peut être utilisée à la place comme indiqué ci-dessous:

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

Pour moi, c'est plus lisible. De même, des caractères encore plus difficiles peuvent être représentés avec la fonction CHR. Par exemple, Stephen a souligné dans sa présentation que CHR (10) peut être utilisé pour avoir une nouvelle ligne imprimée dans la sortie.

L'une des idées intéressantes évoquées par Stephen était l'utilisation d'un script simple pour afficher les différentes représentations de caractères disponibles via la fonction CHR. On peut toujours référencer une ressource comme Tech sur le Net's ASCII Chart ou asciitable.com, mais il est intéressant d'afficher simplement les représentations via le code:

-- 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; / 

L'extrait de code ci-dessus, lorsqu'il est exécuté dans SQL * Plus, affichera un grand nombre de caractères disponibles dans le jeu de caractères ASCII de base et étendu. On peut utiliser la commande spool pour spouler la sortie dans un fichier. Sur ma machine Windows, j'ai même pu afficher ces symboles générés dans le fichier de sortie mis en file d'attente à l'aide de l'application Notepad de base.

Conclusion

Comme Stephen l'a souligné dans sa présentation, la fonction CHR peut rendre les scripts SQL * Plus plus lisibles et maintenables.

Cette histoire, "Oracle CHR Function" a été initialement publiée par JavaWorld.