Programmering

Oracle CHR-funktion

En af de præsentationer, jeg nød på Rocky Mountain Oracle Users Group (RMOUG) Training Days 2010, var Stephen Jacksons præsentation "Brug af SQL til at generere SQL." Jeg har brugt nogle af de teknikker, han diskuterede i sin præsentation for at få SQL til at generere SQL, men en ting jeg ikke havde tænkt på at gøre var at bruge CHR-funktionen til at gøre scripts mere læsbare. Selvom dette indlæg fokuserer på at bruge Oracle's implementering af CHR-strengfunktioner, understøtter andre databaser også CHR (eller CHAR) -funktionen.

Et eksempel på nytten af ​​CHR er i oprettelsen af ​​resultater, der inkluderer tegn, der er signifikante i selve forespørgslen. Brug af CHR gør det muligt for SQL-udvikleren at undgå behovet for at undslippe disse tegn med forespørgselssyntaks betydning. For eksempel, for at udskrive efternavne på medarbejdere i Oracle's HR-eksempelskema med enkelt citater omkring efternavne, kunne man skrive en forespørgsel som denne:

vælg '' '' || efternavn || '' 'fra medarbejdere; 

De fire enkelte citater undgår succesfuldt citatmærket både før og efter efternavnet. Desværre kan det blive let at gå tabt i tilbudene, især ved mere komplekse forespørgsler. Fordi ASCII-decimalkoden på 39 producerer et enkelt citat, når det sendes til CHR, udtrykket CHR (39) kan bruges i stedet som vist næste:

vælg CHR (39) || efternavn || CHR (39) fra ansatte; 

For mig er dette mere læsbart. Tilsvarende kan endnu sværere tegn repræsenteres med CHR-funktionen. For eksempel påpegede Stephen i sin præsentation, at CHR (10) kan bruges til at få en ny linje trykt i output.

En af de interessante ideer, som Stephen diskuterede, var brugen af ​​et simpelt script til at vise de forskellige karakterrepræsentationer, der var tilgængelige via CHR-funktionen. Man kan altid henvise til en ressource som Tech på Netets ASCII-diagram eller asciitable.com, men det er interessant at blot vise repræsentationerne via kode:

- displayCHR.sql - - Vis de tegn, der er knyttet til grundlæggende og udvidede ASCII-koder. - SET head off SET sidestørrelse 0 SET linjestørrelse 120 SET trimspool på SET feedback fra SET bekræft fra SET serveroutput på størrelse 5000 BEGIN FOR i IN 32..255 loop Dbms_output.put_line (i || '' || chr (i)) ; END loop; ENDE; / 

Ovenstående kodestykke viser, når det udføres i SQL * Plus, et stort antal af de tilgængelige tegn i det grundlæggende og udvidede ASCII-tegnsæt. Man kan bruge kommandoen spool til at spole output til en fil. På min Windows-baserede maskine var jeg endda i stand til at se disse genererede symboler i den spolede outputfil ved hjælp af det grundlæggende Notepad-program.

Konklusion

Som Stephen påpegede i sin præsentation, kan CHR-funktionen gøre SQL * Plus-scripts mere læsbare og vedligeholdelige.

Denne historie, "Oracle CHR-funktion" blev oprindeligt udgivet af JavaWorld.