43
5.1.2.1 Қатарлық константалар
SQL қатарлық константалар
бұл қарапайым апострофқа алынған (')
таңбалар реті, мысалы: 'Бұл қатар'. Қатарға апостроф қосу үшін жанына екі
апостроф қосу керек: 'Жанна д''Арк'. Назар аударатын нәрсе: екі бағымнан
айырмашылығы бар (").
Бос орын таңбаларымен және минимум бір қатар ауысуымен
ажыратылған екі қатарлық константа бір константаға біріктіреледі және қатар
бір константада жазылған секілді өңделеді. Мысалы:
SELECT 'foo'
'bar';
эквивалентті:
SELECT 'foobar';
алайда келесі жазба:
SELECT 'foo' 'bar';
синтаксис жағынан қарағанда қате. Бұл оғаш іс
әрекет SQL стандартында
анықталған, PostgreSQL тек оны орындайды.
5.1.2.2 С стильдегі арнайы тізбекті қатарлы константалар
PostgreSQL SQL стандартының кеңейілуі болып табылатын «арнайы
тізбекті » қабылдайды. Арнайы тізбегі бар қатар тікелей апостроф алдында
тұратын Е (үлкен немесе кіші) әрпінен басталады, мысалы: E'foo'. Арнайы
тізбегі бар константа бірнеше қатарға бөлінгенде Е әрпін ең алғашқы ашушы
апостроф алдында қою керек. осындай қатарлар ішінде кері қиғаш сызық (\)
С
типті арнайы тізбекті бастайды; оларда кері қиғаш сызықтың келесі
таңба(лар)мен үйлесімі белгілі бір байт мәнін береді.
5.1
Кесте
Арнайы тізбектер
Арнайы тізбек
Интерпретациясы
\b
таңба
\f
форма беру
\n
жаңа қатар
\r
каретка қайтарылымы
\t
табуляция
\o, \oo, \ooo (o = 0 - 7)
байттың сегіздік мағынасы
\xh, \xhh (h = 0 — 9, A — F)
байттың оналтылық мағынасы
\uxxxx, \Uxxxxxxxx (x = 0 — 9, A — F) Unicode таңбасының 16 немесе 32
биттік оналтылық код
Кері қиғаш сызық кейін болатын кез келген басқа таңба тікелей
қабылданады. Осылайша, қатарға кері қиғаш сызықты қосу үшін екі қиғаш
сызық (\\) жазу керек. Сонымен қатар '' әдеттегі тәсілмен бірге қатарға \'
жазып апостроф қосуға болады. Пайдаланушы өзі жасаған осындай байттық
44
жүйеліктер, әсіресе сегіздік және оналтылық жазбалар, серверлік кодтауда
рұқсат етілген таңбалар құрылғанын қарау керек. Сервер UTF-8 кодтауымен
жұмыс істегенде осындай байт жазбасының орнына Unicode арнайы тізбегін
немесе Unicode балама синтаксисін қолданған дұрыс. Әйтпесе ыңғайы жоқ
тәсілмен UTF-8 таңбаларын қолмен кодтауға және байт бойынша жазуға тура
келеді. Unicode бірге арнайы тізбектер толық қолданылады тек сервер кодтауы
UTF-8
болған
жағдайда.
Басқа
кодтаулар
қолданған
жағдайда
ASCII
таңбалармен (\u007F дейін кодтармен) көрсеткіш рұқсат етіледі. Егер
конфигурацияның standard_conforming_strings параметрі off мәнді болса,
PostgreSQL кері қиғаш сызықты қарапайым қатарларда да, және арнайы
тізбекті қатарларда да арнайы таңба ретінде таниды. Алайда PostgreSQL 9.1
нұсқасында әдеткі бойынша on мәні қабылданған, және осы жағдайда кері
қиғаш сызық арнайы қатарларда танылады. Бұл әрекет стандартпен
қиыстырылады, бірақ кері қиғаш сызық барлық кезде танылған алдыңғы
режимге сенілген құрылым жұмысын бұзуы мүмкін. Уақытша шешім ретінде
пайдаланушы осы параметрді off мәніне өзгертуге болады, бірақ осы
практикадан кеткен дұрыс. Егер пайдаланушыға кері қиғаш сызық арнайы
таңба ретінде керек болса, Е бірге қатарлық константа беру керек.
standard_conforming_strings қосымша ретінде кері қиғаш сызықтың қатарлық
константалардағы әрекетін escape_string_warning және backslash_quote
параметрлері басқарады. Қатарлық константа 0 кодты таңба қоса алмайды.
5.1.2.3 Unicode арнайы тізбекті қатарлық константалар
PostgreSQL қатарларға Unicode таңбаларын олардың коды бойынша қоса
алатын арнайы тізбектердің тағы бір нұсқасын қолдайды. Unicode арнайы
тізбегі бар қатарлық константа U& (үлкен немесе кіші және амперсанд)
басталады, одан кейін бос орынсыз апостроф жүреді, мысалы U&'foo'. Назар
аударатын нәрсе: & операторымен белгісізідік пайда болады, оның алдын алу
үшін операторды бос орынмен қоршау керек. Кейіннен апострофта Unicode
таңбаларын екі тәсілмен жазуға болады: кері қиғаш сызық, кейіннен төрт
оналтылық саннан код, немесе кері қиғаш сызық, қосу таңбасы, одан кейін
төрт оналтылық саннан код. Мысалы, 'data' қатарын келесі жолмен жазуға
болады:
U&'d\0061t\+000061'
Келесі мысалда оңай сөз «слон»:
U&'\0441\043B\043E\043D'
Егер кері қиғаш сызықты қолдану керек болмаса, оның орнына басқа
арнайы таңба қолдануға болады; оны қатардан кейін UESCAPE қосып
көрсетуге болады:
U&'d!0061t!+000061' UESCAPE '!'
Арнайы таңба ретінде кез келген таңбаны алуға болады. Өзгешелік тек
оналтылық сандар, қосу таңбасы, апостроф, бағым және бос орын таңбалары
білдіреді. Жоғарыда айтылған конфигурацияның standard_conforming_strings
45
параметрінің мәні on тең болған жағдайда ғана жұмыс істейді. Бұл әрекет
SQL
операторын тексеретін клиенттік қосымша кері жағдайда адастыруы
және оны осалдық ретінде пайдалануы мүмкін, мысалы, SQL
инъекциясы
үшін. Егер осы параметр off мағыналы болса, осы арнайы тізбектер қателік
тудырады. Арнайы таңбаны қатарға тікелей қосу үшін оны екі рет жазу керек.
5.1.2.4 Долларға алынған қатарлық константалар
Қатарлық консталар үшін стандартты синтаксис әдетте жеткілікті
ыңғайлы болғанымен, қатарда көп апостроф немесе кері қиғаш сызықтар
болса ол қиын оқылуы мүмкін, өйткені әрбір таңбаны көшіру керек . Осындай
жағдайда да сұраныстар оқылуы үшін PostgreSQL қатарлар константаларды
жазудың тағы бір жолын ұсынады
«қатарды долларларға алу». Долларларға
қатарлық константа доллар таңбасынан ($) басталады, бірнеше символдан
тұратын міндетті емес тег және доллар таңбасынан, одан к ейін
жолды
құрайтын қарапайым таңбалардың ретінен және де доллар таңбасымен,
доллар таңбасын жабатын тегпен аяқталады. Мысалы, «Жанна д'Арк» жолын
доллар таңбалы әдісімен екі түрлі жолмен жазуға болады:
$$Жанна д'Арк$$
$SomeTag$Жанна д'Арк$SomeTag$
Назар аударатын жағдай: осындай жол үшін апострофтарды арнайы
жолмен жазудың қажеті жоқ. Шынында, долларға алынған жолда барлық
таңбаларды таза түрде жазу керек: жолдың құрамы дәлме
дәл жазылады. Кері
қиғаш сызық та, доллар таңбасы да арнайы таңбаларға жатпайды, тек егер
ашатын тегке сәйкес жүйелік құрамаса.
Долларға алынған қатарлық константаларды әрбір салынған деңгейге
түрлі тег таңдап бір
біріне салуға болады. Көбінесе бұл белгілі бір
фукцияларды жазуда қолданылады.
Мысалы:
$function$
BEGIN
RETURN ($1 ~ $q$[\t\r\n\v\\]$q$);
END;
$function$
Бұл жерде $q$[\t\r\n\v\\]$q$ жүйелігі доллар таңбасымен [\t\r\n\v\\]
мәтіндік қатарды көрсетеді; мәтіндік қатар PostgreSQL функция орындаған
мезетте өңделеді. Алайда, берілген жүйелік долларға алынған ішкі тегке
($function$) сәйкес емес болғандықтан, ішкі қатар көзқарасынан бұл
константа ішіндегі жай таңбалар. Долларға алынған қатар тегі
ол бар болған
жағдайда
бағымға алынбаған идентификаторлар үшін анықталған ережелерге
сай келуі міндетті. Сонымен қатар доллар таңбаның болмауы шарт. Тегтер
регистрге тәуелді, сол себепті $tag$String content$tag$
дұрыс қатар, ал
$TAG$String content$tag$
дұрыс емес.
Достарыңызбен бөлісу: |