Функция Oracle CHR

Една от презентациите, които ми харесаха в Rocky Mountain Oracle Users Group (RMOUG) Training Days 2010 беше презентацията на Стивън Джаксън „Използване на SQL за генериране на SQL“. Използвал съм някои от техниките, които той обсъжда в презентацията си, за да накара SQL да генерира SQL, но едно нещо, което не се бях сетил да направя, е да използвам функцията CHR, за да направя скриптовете по-четливи. Въпреки че тази публикация се фокусира върху използването на функцията за низ на CHR на Oracle, други бази данни също поддържат функцията CHR (или CHAR).

Един пример за полезността на CHR е в създаването на резултати, които включват знаци, които са важни в самата заявка. Използването на CHR по подходящ начин позволява на разработчика на SQL да избегне необходимостта да избяга от тези знаци със значение на синтаксиса на заявката. Например, за да отпечатате фамилните имена на служители в примерната схема на HR на Oracle с единични кавички около фамилните имена, може да се напише заявка като тази:

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

Четирите единични кавички успешно избягат от кавичката както преди, така и след фамилното име. За съжаление може лесно да се изгубите в кавичките, особено при по-сложни заявки. Тъй като ASCII десетичният код на 39 създава единична кавичка, когато се предава на CHR, изразът CHR(39)може да се използва вместо това, както е показано по-долу:

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

За мен това е по-четливо. По същия начин, дори по-трудни символи могат да бъдат представени с функцията CHR. Например, Стивън посочи в презентацията си, че CHR (10) може да се използва за отпечатване на нов ред в изхода.

Една от интересните идеи, които Стивън обсъди, беше използването на прост скрипт за показване на различните представяния на символи, налични чрез функцията CHR. Винаги може да се направи препратка към ресурс като Tech на ASCII Chart на мрежата или asciitable.com, но е интересно просто да се покажат представянията чрез код:

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

Горният фрагмент от код, когато се изпълнява в SQL * Plus, ще покаже голям брой символи, налични в основния и разширен ASCII набор от символи. Човек може да използва командата за намотка, за да накара изхода във файл. На моята машина, базирана на Windows, дори успях да видя тези генерирани символи в буферния изходен файл, използвайки основното приложение Notepad.

Заключение

Както посочи Стивън в презентацията си, функцията CHR може да направи SQL * Plus скриптовете по-четливи и поддържани.

Тази история, "Oracle CHR функция", първоначално е публикувана от JavaWorld.