Oracle CHR funkcija

Jedna od prezentacija u kojima sam uživao na Danima obuke korisnika grupe Rocky Mountain Oracle 2010 (RMOUG) bila je prezentacija Stephena Jacksona "Korištenje SQL-a za generiranje SQL-a". Koristio sam neke od tehnika o kojima je raspravljao u svojoj prezentaciji kako bi SQL generirao SQL, ali jedno na što nisam mislio bilo je koristiti funkciju CHR kako bi skripte učinile čitljivijima. Iako se ovaj post fokusira na upotrebu Oraclove implementacije CHR funkcije niza, druge baze podataka podržavaju i funkciju CHR (ili CHAR).

Primjer korisnosti CHR je u stvaranju rezultata koji uključuju znakove koji su značajni u samom upitu. Korištenje CHR-a na odgovarajući način omogućuje programeru SQL-a da izbjegne potrebu za bijegom od ovih znakova sa značenjem sintakse upita. Na primjer, za ispis prezimena zaposlenika u Oraclovoj shemi uzorka HR s pojedinačnim navodnicima koji okružuju prezimena, moglo bi se napisati upit poput ovog:

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

Četiri pojedinačna navodnika uspješno izbjegavaju navodnik i prije i nakon prezimena. Nažalost, lako se možete izgubiti u navodnicima, posebno za složenije upite. Budući da ASCII decimalni kod od 39 stvara jedan navodnik kada se proslijedi CHR-u, izraz CHR(39)se umjesto njega može koristiti kao što je prikazano sljedeće:

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

Za mene je ovo čitljivije. Slično tome, s funkcijom CHR mogu se predstaviti još teži znakovi. Na primjer, Stephen je u svom izlaganju istaknuo da se CHR (10) može koristiti za ispis novog retka u izlazu.

Jedna od zanimljivih ideja o kojima je Stephen raspravljao bila je upotreba jednostavne skripte za prikaz različitih prikaza likova dostupnih putem funkcije CHR. Uvijek se na mrežni ASCII Chart ili asciitable.com može uputiti resurs poput Tech, ali zanimljivo je jednostavno prikazati prikaze putem koda:

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

Gornji isječak koda, kada se izvrši u SQL * Plus, prikazat će velik broj znakova dostupnih u osnovnom i proširenom ASCII skupu znakova. Naredbom spool možete koristiti spool izlaz za datoteku. Na svom računalu sa sustavom Windows uspio sam čak vidjeti ove generirane simbole u spool izlaznoj datoteci pomoću osnovne aplikacije Notepad.

Zaključak

Kao što je Stephen istaknuo u svojoj prezentaciji, funkcija CHR može SQL * Plus skripte učiniti čitljivijima i održivijima.

Ovu priču, "Oracle CHR funkcija" izvorno je objavio JavaWorld.