Oracle CHR-Funktion

Eine der Präsentationen, die ich an den Trainingstagen 2010 der Rocky Mountain Oracle Users Group (RMOUG) genossen habe, war Stephen Jacksons Präsentation "Verwenden von SQL zum Generieren von SQL". Ich habe einige der Techniken verwendet, die er in seiner Präsentation besprochen hat, damit SQL SQL generiert, aber eine Sache, an die ich nicht gedacht hatte, war die Verwendung der CHR-Funktion, um Skripte besser lesbar zu machen. Obwohl sich dieser Beitrag auf die Verwendung der Implementierung der CHR-Zeichenfolgenfunktion von Oracle konzentriert, unterstützen andere Datenbanken auch die CHR- (oder CHAR-) Funktion.

Ein Beispiel für die Nützlichkeit von CHR ist das Erstellen von Ergebnissen, die Zeichen enthalten, die in der Abfrage selbst von Bedeutung sind. Durch die geeignete Verwendung von CHR kann der SQL-Entwickler vermeiden, dass diese Zeichen mit der Bedeutung der Abfragesyntax maskiert werden müssen. Um beispielsweise die Nachnamen von Mitarbeitern im HR-Beispielschema von Oracle mit einfachen Anführungszeichen um die Nachnamen zu drucken, könnte eine Abfrage wie folgt geschrieben werden:

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

Die vier einfachen Anführungszeichen werden sowohl vor als auch nach dem Nachnamen erfolgreich aus dem Anführungszeichen entfernt. Leider kann es leicht zu Verlusten in den Anführungszeichen kommen, insbesondere bei komplexeren Abfragen. Da der ASCII-Dezimalcode 39 bei Übergabe an CHR ein einfaches Anführungszeichen erzeugt, kann der Ausdruck CHR(39)stattdessen wie folgt verwendet werden:

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

Für mich ist das besser lesbar. Ebenso können mit der CHR-Funktion noch schwierigere Zeichen dargestellt werden. Zum Beispiel wies Stephen in seiner Präsentation darauf hin, dass CHR (10) verwendet werden kann, um eine neue Zeile in der Ausgabe zu drucken.

Eine der interessanten Ideen, die Stephen diskutierte, war die Verwendung eines einfachen Skripts, um die verschiedenen Zeichendarstellungen anzuzeigen, die über die CHR-Funktion verfügbar sind. Man kann immer auf eine Ressource wie Tech im ASCII-Diagramm des Netzes oder auf asciitable.com verweisen, aber es ist interessant, die Darstellungen einfach per Code anzuzeigen:

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

Der obige Codeausschnitt zeigt bei Ausführung in SQL * Plus eine große Anzahl der im Basis- und erweiterten ASCII-Zeichensatz verfügbaren Zeichen an. Mit dem Befehl spool kann die Ausgabe in eine Datei gespoolt werden. Auf meinem Windows-basierten Computer konnte ich diese generierten Symbole sogar in der Spool-Ausgabedatei mit der Basisanwendung Notepad anzeigen.

Fazit

Wie Stephen in seiner Präsentation betonte, kann die CHR-Funktion SQL * Plus-Skripte lesbarer und wartbarer machen.

Diese Geschichte "Oracle CHR Function" wurde ursprünglich von JavaWorld veröffentlicht.