На главную страницу
Форум txt.version   




Статья :: PostgreSQL Константы

Константы

При работе с базами данных многие объекты хранятся на диске, а для обращения к ним используются идентификаторы (имена таблиц, полей и функций). Однако неизбежно настанет момент, когда в систему потребуется передать новые данные - например, при вставке новых записей, при формировании секций с критериями удаления или модификации или при вычислениях на базе существующих записей. Такие данные передаются в виде констант, также иногда называемых «литералами». Константы предназначены для «буквального» представления данных в командах 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, было ошибочно записано в виде Luoi sa 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.

Таблица 3.3. Служебные последовательности PostareSQL в стиле С

Последовательность

Описание

\\

Обратная косая черта (литерал)

V

Апостроф (литерал)

Забой

\f

Подача листа

\п

Новая строка

Возврат курсора

\t

Табуляция

\ххх

ASCII-символ с восьмеричным кодом ххх

ВНИМАНИЕ

Вследствие того что обратная косая черта имеет особый смысл (см. табл. 3.3), при включении в строку этот символ обязательно экранируется другой косой чертой (например, в строке 'A single backslash is: \\' двойной символ обратной косой черты преобразуется в один).

Если две строковые константы PostgreSQL разделены промежутком, в который входит хотя бы один символ новой строки, они объединяются в одну строковую константу. Пример приведен в листинге 3.5.

Листинг 3.5. Разбиение строковых констант

booktown=# SELECT 'book'

booktown-#

booktown-# 'end' AS example;

example

bookend (1 row)

booktown=# SELECT 'bookend' AS example;

example

bookend

(1 row)

Обе команды имеют эквивалентную семантику. Тем не менее фрагменты должны разделяться хотя бы одним разрывом строки, а при попытке разделить их только пробелами PostgreSQL выдает сообщение об ошибке:

booktown=# SELECT 'book' 'end' AS example;

ERROR: parser: parse error at or near .....

Дело в том, что без разрыва строки PostgreSQL считает, что вы ссылаетесь на две отдельные константы. Объединение двух строковых констант в одной строке выполняется оператором конкатенации 11, описанным в главе 5:

booktown=# SELECT 'book.' || 'end1 AS example; example

bookend (1 row)

Битовые последовательности

Битовые последовательности предназначены для представления двоичных величин в виде произвольной последовательности нулей и единиц. Как и строковые константы, битовые последовательности заключаются в апострофы, но начинаются с обязательного префикса В (в верхнем или нижнем регистре). По наличию этого символа PostgreSQL определяет, что строка является битовой последовательностью, а не обычной символьной строкой.

В соответствии с синтаксисом PostgreSQL открывающий апостроф должен следовать сразу же после префикса В, а битовая последовательность не может содержать других символов, кроме 0 и 1. Внутренние пробелы в битовых последовательностях запрещены, но допускается их разбиение по аналогии с обычными строковыми константами (см. выше пункт «Строковые константы).

Битовые строки обычно требуются только при работе с двоичными функциями и таблицами, содержащими двоичные данные. В листинге 3.6 продемонстрирована вставка битовой последовательности в таблицу. Сначала двоичное представление байта сохраняется в таблице my_bytes, а затем результат операции проверяется простым запросом.

Листинг 3.6. Использование битовых последовательностей

testdiH* INSERT INTO my_bytes VALUES (B'OOOOOOOO'):

testdb=# SELECT my_byte FROM my_bytes:

my_byte

10000000

10000001

10000101

11111111

00000000

(5 rows)

Целочисленные константы

Целочисленные константы используются гораздо чаще, чем битовые последовательности. В PostgreSQL целочисленной константой считается любая лексема, состоящая из цифр (без десятичной точки) и не заключенная в апострофы. Интервал допустимых значений целочисленных констант зависит в основном от контекста, но в PostgreSQL по умолчанию целочисленный тип представляется четырьмя байтами и принимает значения из интервала от -2 147 483 648 до 2 147 483 647.

Целочисленные константы часто встречаются в математических операциях, а также в командах SQL, содержащих ссылки на поля целочисленного типа. В листинге 3.7 целочисленные константы используются для обновления кода автора командой UPDATE.

Вспомните таблицу authors, которая устанавливает соответствие между числовым кодом автора и двумя строками, представляющими его имя и фамилию. Допустим, из каких-то административных соображений было решено, что все коды авторов, меньшие 100, нужно увеличить до 100 и выше.

Внесение исправлений начинается с поиска записей, у которых поле id удовлетворяет данному условию. Для этого в команду SELECT включается секция WHERE с целочисленной константой, используемой при проверке условия «меньше».

Листинг 3.7. Использование целочисленных констант

booktown=# SELECT * FROM

authors WHERE id < 100;

id | lastjiame | firstjiame

16 | Alcott | Louisa May (1 row)

booktown=# SELECT * FROM authors WHERE id = 100:

id | lastjiame | firstjiame

(0 rows)

booktown=# UPDATE authors

booktown-* SET id = 116

booktown-tf WHERE id = 16:

UPDATE 1

booktown=# SELECT * FROM authors WHERE id = 116:

id | last_name firstjiame

116 | Alcott | Louisa May (1 row)

В листинге 3.7 секция WHERE команды SELECT сравнивает идентификатор поля id с целочисленной константой 100. Результат состоит из одной записи. После обнаружения записи с недопустимым значением id вводится вторая команда SELECT, которая проверяет, существуют ли в таблице записи с кодом i d=116. Мы убеждаемся в том, что код 116 не задействован в таблице authors, поскольку значения в поле id должны быть уникальными. Операция завершается командой UPDATE, также содержащей целочисленные константы в секциях SET и WHERE.

Вещественные константы

Вещественные константы обладают определенным сходством с целочисленными константами, но используются для представления не только целых, но и дробных величин.

Существует несколько форматов представления вещественных констант, представленных в табл. 3.4. Запись ## означает одну или несколько цифр.

Таблица 3.4. Представление величин с плавающей точкой

Представление Пример
##.## 6.4
##e[+-]## 8е-8
[##].##[e[+-]##] .04e8
##.[##][e[+-]##] 4e.5

В первом формате до десятичной точки и после нее должна стоять хотя бы одна цифра. Это необходимо для того, чтобы модуль лексического анализа PostgreSQL опознал значение как вещественную, а не целочисленную константу. В других форматах хотя бы одна цифра должна стоять до или после экспоненты, обозначенной буквой е. Наличие десятичной точки и/или экспоненты отличает вещественные константы от целочисленных.

В листинге 3.8 использование всех вещественных форматов продемонстрировано на примере простой команды SQL SELECT.

Листинг 3.8. Допустимые вещественные значения

booktown=# SELECT .04 AS small_float.

booktown-# -16.63 AS negative_float,

booktown-# 4e3 AS exponent!al_float,

booktown-# 6.1e2 AS negative_exponent:

small_float | negative_float |

exponential__float | negative_exponent

0.04 -16.63 4000 | 0.061

(1 row)

Логические константы

Логические (булевы) константы гораздо проще всех остальных типов констант PostgreSQL, поскольку они принимают всего два допустимых значения: true и false. Встретив любое из этих значений, не заключенное в апострофы, PostgreSQL интерпретирует его как логическую константу. Пример показан в листинге 3.9.

Листинг 3.9. Различия между true и 'true'

testdb=# SELECT true AS boolean_t. testdb-# 'true' AS string_t,

testdb-# false AS boolean_f,

testdb-# 'false' AS string_f;

boo1_t | string_t | bool_f | string_f

t | true | f | false

(1 row)

Как показано в листинге 3.9, PostgreSQL выводит значения логического типа в виде t или f, однако это вовсе не означает, что символы t и f могут использоваться в качестве логических констант. PostgreSQL не сможет правильно интерпретировать их, что приведет к ошибке.

PostgreSQL Константы

страницы в данном разделе 
 PostgreSQL Глава 3. Краткий курс SQL  PostgreSQL Краткий курс SQL
 PostgreSQL Знакомство с SQL  PostgreSQL Знакомство с реляционными базами данных
 PostgreSQL Команды SQL  PostgreSQL Ключевые слова и идентификаторы
 PostgreSQL Константы  PostgreSQL Специальные символы
 PostgreSQL Комментарии  PostgreSQL Типы данных
 PostgreSQL Символьные типы  PostgreSQL Числовые типы
 PostgreSQL Геометрические типы  PostgreSQL Массивы
 PostgreSQL Преобразование типов  PostgreSQL Таблицы


Разделы
Околокомпьютерная литература (375)
Программирование (102)
Программы (75)
ОС и Сети (49)
Интернет (29)
Аппаратное обеспечение (16)
Базы данных (6)

Содержание сайта (выборка)
Apache
Протоколы TCP/IP (принципы, протоколы и архитектура)

PHP, PELR, JSP
PHP
JavaServer Pages (JSP)

Базы данных
Основы mysql
СУБД INFORMIX
СУБД POSTGRES
Основы проектирования реляционных баз данных

HTML, javascript
Спецификация HTML 4.01
Каскадные Таблицы Стилей, Уровень 2
Клиентский JavaScript. Справочник.
JavaScript руководство пользователя
Серверный JavaScript 1.4. Руководство по Использованию.

Паскаль, C, C++, C#
GCC (примеры)
FAQ Валентинa Озеровa DELPHI
C





 
©  programming-lang.com  справочник программиста