En av presentasjonene jeg likte på Rocky Mountain Oracle Users Group (RMOUG) Training Days 2010 var Stephen Jacksons presentasjon "Using SQL to Generate SQL." Jeg har brukt noen av teknikkene han diskuterte i presentasjonen sin for å få SQL til å generere SQL, men en ting jeg ikke hadde tenkt å gjøre var å bruke CHR-funksjonen for å gjøre skript mer lesbare. Selv om dette innlegget fokuserer på å bruke Oracle's implementering av CHR-strengfunksjoner, støtter andre databaser også CHR (eller CHAR) -funksjonen.
Et eksempel på nytteverdien av CHR er å skape resultater som inkluderer tegn som er viktige i selve spørringen. Ved å bruke CHR på riktig måte kan SQL-utvikleren unngå behovet for å unnslippe disse tegnene med spørresyntaksbetydning. For eksempel, for å skrive ut etternavnet til ansatte i Oracles HR-eksempelskema med enkle anførselstegn rundt etternavnene, kan man skrive et spørsmål som dette:
velg '' '' || etternavn || '' '' fra ansatte;
De fire enkle anførselstegnene slipper vellykket for sitatmerket både før og etter etternavnet. Dessverre kan det bli lett å gå seg vill i sitatene, spesielt for mer komplekse spørsmål. Fordi ASCII desimalkoden på 39 produserer et enkelt sitat når det sendes til CHR, uttrykket CHR (39)
kan brukes i stedet som vist neste:
velg CHR (39) || etternavn || CHR (39) fra ansatte;
For meg er dette mer lesbart. På samme måte kan enda vanskeligere tegn vises med CHR-funksjonen. For eksempel påpekte Stephen i sin presentasjon at CHR (10) kan brukes til å få en ny linje trykt i utgangen.
En av de interessante ideene som Stephen diskuterte, var å bruke et enkelt skript for å vise de forskjellige karakterrepresentasjonene som er tilgjengelige via CHR-funksjonen. Man kan alltid referere til en ressurs som Tech på Netts ASCII-diagram eller asciitable.com, men det er interessant å bare vise representasjonene via kode:
- displayCHR.sql - - Vis tegnene som er tilknyttet grunnleggende og utvidede ASCII-koder. - SET hodet av SET sidestørrelse 0 SET linjestørrelse 120 SET trimspool på SET tilbakemelding av SET bekreft av SET serverutgang på størrelse 5000 BEGIN FOR i IN 32..255 loop Dbms_output.put_line (i || '' || chr (i)) ; SLUTT sløyfe; SLUTT; /
Ovenstående kodebit, når det kjøres i SQL * Plus, vil vise et stort antall tegn tilgjengelig i det grunnleggende og utvidede ASCII-tegnsettet. Man kan bruke spool-kommandoen til å spole utdataene til en fil. På min Windows-baserte maskin kunne jeg til og med se disse genererte symbolene i den utrullede utdatafilen ved hjelp av det grunnleggende Notisblokk-programmet.
Konklusjon
Som Stephen påpekte i sin presentasjon, kan CHR-funksjonen gjøre SQL * Plus-skript mer lesbare og vedlikeholdbare.
Denne historien, "Oracle CHR Function" ble opprinnelig utgitt av JavaWorld.