Programmering

Oracle CHR-funksjon

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.

$config[zx-auto] not found$config[zx-overlay] not found