Programovanie

Funkcia Oracle CHR

Jednou z prezentácií, ktoré som mal na Training Days 2010 v Rocky Mountain Oracle Users Group (RMOUG), bola prezentácia Stephena Jacksona „Používanie SQL na generovanie SQL“. Použil som niektoré z techník, o ktorých hovoril vo svojej prezentácii, aby SQL vygeneroval SQL, ale jednu vec, ktorú ma nenapadlo robiť, bolo použiť funkciu CHR na zlepšenie čitateľnosti skriptov. Aj keď sa tento príspevok zameriava na použitie implementácie reťazcových funkcií CHR spoločnosti Oracle, ďalšie databázy tiež podporujú funkciu CHR (alebo CHAR).

Jedným z príkladov užitočnosti CHR je vytváranie výsledkov, ktoré obsahujú znaky, ktoré sú významné v samotnom dotaze. Správne použitie CHR umožňuje vývojárovi SQL vyhnúť sa nutnosti uniknúť týmto znakom s významom syntaxe dotazu. Napríklad na vytlačenie priezvisk zamestnancov vo vzorovej schéme HR spoločnosti Oracle s jednoduchými úvodzovkami obklopujúcimi priezviská je možné napísať dotaz takto:

vyberte '' '' || priezvisko || '' 'od zamestnancov; 

Štyri jednoduché úvodzovky úspešne uniknú z úvodzovky pred aj za priezviskom. Strata cenových ponúk, bohužiaľ, môže byť ľahká, najmä pri zložitejších dotazoch. Pretože desatinný kód ASCII 39 produkuje pri odovzdaní do CHR jednoduchú ponuku, výraz CHR (39) môžu byť použité namiesto toho, ako je uvedené ďalej:

vyberte CHR (39) || priezvisko || CHR (39) od zamestnancov; 

Pre mňa je to čitateľnejšie. Podobne môžu byť pomocou funkcie CHR znázornené aj zložitejšie znaky. Napríklad Stephen vo svojej prezentácii poukázal na to, že CHR (10) možno použiť na vytlačenie nového riadku vo výstupe.

Jednou zo zaujímavých myšlienok, o ktorej hovoril Stephen, bolo použitie jednoduchého skriptu na zobrazenie rôznych reprezentácií znakov dostupných prostredníctvom funkcie CHR. Jeden môže kedykoľvek odkazovať na zdroj ako Tech v sieti ASCII Chart alebo asciitable.com, ale je zaujímavé jednoducho zobraziť reprezentácie pomocou kódu:

- displayCHR.sql - - Zobrazí znaky spojené so základnými a rozšírenými kódmi ASCII. - SET head off SET pageize 0 SET linesize 120 SET trimspool on SET feedback off SET SET off off server serverput on size 5000 BEGIN FOR i IN 32..255 loop Dbms_output.put_line (i || '' || chr (i)) ; KONIEC slučka; KONIEC; / 

Vyššie uvedený úryvok kódu, keď sa vykoná v SQL * Plus, zobrazí veľké množstvo znakov dostupných v základnej a rozšírenej znakovej sade ASCII. Pomocou príkazu spool sa dá zaradiť výstup do súboru. Na svojom počítači so systémom Windows som bol schopný tieto generované symboly zobraziť v spoolovom výstupnom súbore pomocou základnej aplikácie Poznámkový blok.

Záver

Ako Stephen zdôraznil vo svojej prezentácii, funkcia CHR umožňuje, aby boli skripty SQL * Plus čitateľnejšie a udržiavateľnejšie.

Tento príbeh, „Oracle CHR Function“, bol pôvodne publikovaný spoločnosťou JavaWorld.

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