Константы
При работе с базами данных многие объекты хранятся на диске, а для обращения к ним используются идентификаторы (имена таблиц, полей и функций). Однако неизбежно настанет момент, когда в систему потребуется передать новые данные – например, при вставке новых записей, при формировании секций с критериями удаления или модификации или при вычислениях на базе существующих записей. Такие данные передаются в виде констант, также иногда называемых "литералами". Константы предназначены для "буквального" представления данных в командах SQL (вместо ссылки на них по идентификатору).
Константы с косвенной типизацией автоматически распознаются модулем лексического разбора PostgreSQL по их синтаксису. В PostgreSQL поддерживаются пять вариантов констант с косвенной типизацией:
- строковые константы;
- битовые последовательности;
- целочисленные константы;
- вещественные константы;
- логические константы.
Строковые константы
Строковая константа представляет собой произвольную последовательность символов, заключенную в апострофы. Строковые константы часто используются при вставке новых данных в таблицу и при передаче символьной информации другим объектам базы данных. Ниже приведен пример использования строковых констант при обновлении имен и фамилий таблицы authors базы данных booktown:
booktown=# SELECT * FROM authors; id | lastjiame | firstjiame 1809 Geisel | Theodor Seuss 1111 | Denham | Ariel 15990 | Bourgeois | Paulette 25041 | Bianco | Margery Williams 16 | Alcott I Luoisa May 115 | Рое | Edgar Allen (6 rows)
Из результатов запроса видно, что поле firstjiame с кодом id=16, Louisa May, было ошибочно записано в виде Luoisa May. Ошибка исправляется командой UPDATE со строковой константой, приведенной в листинге 3.4.
Листинг 3.4. Использование строковых констант.
booktown=# UPDATE authors booktown-# SET firstjiame = 'Louisa May' booktown-l WHERE firstjiame = 'Luoisa May' UPDATE 1 booktown-# SELECT * FROM authors; id | lastjiame | firstjiame 1809 | Geisel | Theodor Seuss 1111 | Denham | Ariel 15990 | Bourgeois | Paulette 25041 | Bianco j Margery Williams 115 I Poe I Edgar Allen 16 j Alcott I Louisa May (6 rows)
Команда UPDATE в листинге 3.4 использует строковые константы Louisa May и Luoisa May в сочетании с ключевыми словами SET и WHERE. Как видно из результатов запроса, команда обновляет содержимое таблицы, заданной идентификатором authors, и исправляет опечатку.
Тот факт, что строковые константы заключаются между апострофами, порождает очевидную семантическую проблему: если в самой последовательности символов встречается апостроф, граница строковой константы будет определена неверно. Чтобы экранировать апостроф в строке (то есть обеспечить его интерпретацию как литерала), следует поставить два апострофа подряд. Модуль лексического анализа воспринимает удвоенный апостроф в строковой константе как один апостроф-литерал. PostgreSQL также позволяет экранировать апострофы обратной косой чертой, в стиле языка С:
testdb=# SELECT 'PostgreSQL"s great!' AS example; example PostgreSQL's great! (1 row) booktown=# SELECT 'PostgreSQLN's С-style slashes are great!' AS example; example PostgreSQL's C-style slashes are great! (1 row)
В PostgreSQL также поддерживаются служебные последовательности языка С, перечисленные в табл. 3.3.