Upload
others
View
11
Download
1
Embed Size (px)
Citation preview
Руководство по языкуSQL СУБД Firebird 4.0
Firebird 4.0 Beta 216 января 2020 — v.0000-1
Спонсоры документации:Platinum Sponsor
Gold Sponsor
http://moex.comhttp://www.ib-aid.com
Руководство по языку SQL СУБД Firebird 4.0: Firebird 4.0 Beta 2Над документом работали:Денис Симонов, Пол Винкенуг, Дмитрий Филиппов, Дмитрий Еманов, Александр Карпейкин, ДмитрийКузьменко, Алексей Ковязин
Редактор:Симонов Денис
СодержаниеВведение ......................................................................................................................................... 221. Структура языка ......................................................................................................................... 24
Общие сведения ..................................................................................................................... 24Подмножества SQL ........................................................................................................ 24Диалекты SQL ................................................................................................................. 24Действия при ошибках ................................................................................................... 25
Основные сведения: операторы, предложения, ключевые слова ..................................... 25Идентификаторы .................................................................................................................... 26Литералы ................................................................................................................................. 27Операторы и специальные символы .................................................................................... 28Комментарии ........................................................................................................................... 28
2. Типы данных .............................................................................................................................. 30Целочисленные типы данных ............................................................................................... 32
SMALLINT ........................................................................................................................ 32INTEGER .......................................................................................................................... 33BIGINT .............................................................................................................................. 33Шестнадцатеричный формат для целых чисел ........................................................... 33
Типы данных с плавающей точкой ....................................................................................... 34Приблизительные числовые типы ................................................................................ 34
FLOAT ...................................................................................................................... 35FLOAT с указанием точности ........................................................................ 35
REAL ........................................................................................................................ 36DOUBLE PRECISION .............................................................................................. 36LONG FLOAT ........................................................................................................... 36
Десятичные типы с плавающей точкой ........................................................................ 36DECFLOAT ............................................................................................................... 36
Режимы округления ........................................................................................ 37Семантика сравнения .................................................................................... 39Обработка ошибок .......................................................................................... 41Поддержка в клиентских приложениях ......................................................... 42Литералы констант DECFLOAT ..................................................................... 42
Типы данных с фиксированной точкой ................................................................................ 42NUMERIC ......................................................................................................................... 43DECIMAL .......................................................................................................................... 44Точность арифметических операций ............................................................................ 44
Типы данных для работы с датой и временем ................................................................... 45Часовой пояс .................................................................................................................. 46
Хранение ................................................................................................................. 47DATE ................................................................................................................................ 47TIME ................................................................................................................................. 47TIMESTAMP ..................................................................................................................... 48Литералы даты и времени ............................................................................................ 49Операции, использующие значения даты и времени ................................................. 51
Символьные типы данных ..................................................................................................... 52UNICODE ......................................................................................................................... 53Набор символов клиента ............................................................................................... 53Специальные наборы символов ................................................................................... 53Последовательность сортировки .................................................................................. 54
Регистронезависимый поиск .................................................................................. 54Последовательности сортировки для UTF-8 ....................................................... 54
Индексирование символьных типов ............................................................................. 55
3
Руководство по языку SQL СУБД Firebird 4.0
CHAR ............................................................................................................................... 56VARCHAR ........................................................................................................................ 56NCHAR ............................................................................................................................. 56Строковые литералы ..................................................................................................... 57
Альтернативы для апострофов в строковых литералах ..................................... 57BOOLEAN ................................................................................................................................ 58Бинарные типы данных ......................................................................................................... 60
BINARY ............................................................................................................................ 60VARBINARY ..................................................................................................................... 60BLOB ................................................................................................................................ 61
Подтипы BLOB ........................................................................................................ 61Особенности BLOB ................................................................................................. 62
Массивы .......................................................................................................................... 63Специальные типы данных ................................................................................................... 64
Тип данных SQL_NULL .................................................................................................. 64Преобразование типов данных ............................................................................................. 65
Явное преобразование типов данных .......................................................................... 65Преобразование к домену ..................................................................................... 66Преобразование к типу столбца ........................................................................... 66Допустимые преобразования для функции CAST ............................................... 66Преобразование строк в дату и время ................................................................ 67
Неявное преобразование типов данных ...................................................................... 70Пользовательские типы данных — домены ........................................................................ 71
Атрибуты домена ............................................................................................................ 71Переопределение свойств доменов ............................................................................. 71Создание доменов ......................................................................................................... 72Изменение доменов ....................................................................................................... 72Удаление доменов .......................................................................................................... 73
3. Общие элементы языка ............................................................................................................ 74Выражения .............................................................................................................................. 74
Константы ........................................................................................................................ 76Строковые константы (литералы) ......................................................................... 76
Строковые константы в шестнадцатеричной нотации ................................ 76Вводный синтаксис для строковых литералов ............................................ 77
Числовые константы .............................................................................................. 77Шестнадцатеричная нотация чисел .............................................................. 77Диапазон значений шестнадцатеричных чисел ........................................... 78
Операторы SQL .............................................................................................................. 79Приоритет операторов ........................................................................................... 79Оператор конкатенации ......................................................................................... 79Арифметические операторы .................................................................................. 79Операторы сравнения ............................................................................................ 80Логические операторы ........................................................................................... 81
AT ..................................................................................................................................... 81NEXT VALUE FOR .......................................................................................................... 82Условные выражения ..................................................................................................... 82
CASE ........................................................................................................................ 82NULL в выражениях ....................................................................................................... 84
Выражения возвращающие NULL ......................................................................... 84NULL в логических выражениях ........................................................................... 84
Подзапросы ............................................................................................................................. 85Коррелированные подзапросы ...................................................................................... 85
4
Руководство по языку SQL СУБД Firebird 4.0
Подзапросы возвращающие скалярный результат (Singletons) ................................. 85Предикаты ............................................................................................................................... 86
Утверждения ................................................................................................................... 86Предикаты сравнения .................................................................................................... 87Другие предикаты сравнения ........................................................................................ 87
BETWEEN ................................................................................................................ 87LIKE .......................................................................................................................... 88
Трафаретные символы ................................................................................... 89Использование управляющего символа в предложении ESCAPE ............. 89
STARTING WITH ..................................................................................................... 90CONTAINING ........................................................................................................... 90SIMILAR TO ............................................................................................................. 91
Синтаксис регулярных выражений SQL ....................................................... 91Создание регулярных выражений ................................................................. 92
IS DISTINCT FROM ................................................................................................ 97IS .............................................................................................................................. 97
Предикаты существования ............................................................................................ 98EXISTS ..................................................................................................................... 98IN .............................................................................................................................. 99SINGULAR ............................................................................................................. 102
Количественные предикаты подзапросов .................................................................. 102ALL ......................................................................................................................... 102ANY и SOME ......................................................................................................... 103
4. Операторы DDL ....................................................................................................................... 105DATABASE ............................................................................................................................. 105
CREATE DATABASE ..................................................................................................... 105Использование псевдонимов БД ........................................................................ 107Создание БД на удалённом сервере .................................................................. 107Необязательные параметры CREATE DATABASE ............................................ 108Кто может создать базу данных? ........................................................................ 109Примеры ................................................................................................................ 109
ALTER DATABASE ........................................................................................................ 111Добавление вторичного файла ........................................................................... 112Изменение пути и имени дельта файла ............................................................. 112Перевод базы данных в режим «безопасного копирования» ........................... 113Изменение набора символов по умолчанию ..................................................... 114Изменение привилегий выполнения по умолчанию .......................................... 114LINGER .................................................................................................................. 115Шифрование базы данных .................................................................................. 115Кто может выполнить ALTER DATABASE? ......................................................... 116
DROP DATABASE ......................................................................................................... 116Кто может удалить базу данных? ....................................................................... 117Примеры ................................................................................................................ 117
SHADOW ............................................................................................................................... 117CREATE SHADOW ........................................................................................................ 117
Режимы AUTO и MANUAL ................................................................................... 118Необязательные параметры CREATE SHADOW ............................................... 118Кто может создать теневую копию? ................................................................... 119Примеры ................................................................................................................ 119
DROP SHADOW ............................................................................................................ 119Кто может удалить теневую копию? ................................................................... 120Примеры ................................................................................................................ 120
5
Руководство по языку SQL СУБД Firebird 4.0
DOMAIN ................................................................................................................................. 120CREATE DOMAIN ......................................................................................................... 120
Кто может создать домен? .................................................................................. 123Примеры ................................................................................................................ 123
ALTER DOMAIN ............................................................................................................ 124Что не может изменить ALTER DOMAIN ............................................................ 127Кто может изменить домен? ............................................................................... 127Примеры ................................................................................................................ 128
DROP DOMAIN ............................................................................................................. 128Кто может удалить домен? .................................................................................. 129Примеры ................................................................................................................ 129
TABLE .................................................................................................................................... 129CREATE TABLE ............................................................................................................. 129
Символьные столбцы ........................................................................................... 133Ограничение NOT NULL ...................................................................................... 133Значение по умолчанию ...................................................................................... 134Столбцы основанные на домене ........................................................................ 134Столбцы идентификации (автоинкремент) ........................................................ 134Вычисляемые поля ............................................................................................... 135Столбцы типа массив .......................................................................................... 136Ограничения .......................................................................................................... 136
Имена для ограничений и их индексов ...................................................... 136Первичный ключ (PRIMARY KEY) ............................................................... 137Ограничение уникальности (UNIQUE) ........................................................ 137Внешний ключ (FOREIGN KEY) .................................................................. 138Ограничение CHECK .................................................................................... 139
Привилегии выполнения ...................................................................................... 140Кто может создать таблицу? ............................................................................... 140Примеры ................................................................................................................ 140Глобальные временные таблицы (GTT) ............................................................. 143
Ограничения GTT ......................................................................................... 144Примеры ........................................................................................................ 145
Внешние таблицы ................................................................................................. 145Формат внешних файлов ............................................................................. 146Примеры использования внешних таблиц ................................................. 147
ALTER TABLE ................................................................................................................ 148Счётчик форматов ................................................................................................ 152Предложение ADD ................................................................................................ 152Предложение DROP ............................................................................................. 153Предложение DROP CONSTRAINT .................................................................... 153Предложение DROP SQL SECURITY ................................................................. 154Предложение ALTER [COLUMN] ......................................................................... 154
Переименование столбца ............................................................................ 154Изменение типа столбца ............................................................................. 154Изменение позиции столбца ....................................................................... 155Установка и удаление значения по умолчанию ......................................... 155Установка и удаление ограничения NOT NULL ......................................... 156Изменение столбцов идентификации ......................................................... 156Изменение вычисляемых столбцов ............................................................ 157Не изменяемые атрибуты ............................................................................ 158
Предложение ALTER SQL SECURITY ................................................................ 158Кто может изменить таблицу? ............................................................................. 158
6
Руководство по языку SQL СУБД Firebird 4.0
DROP TABLE ................................................................................................................. 158Кто может удалить таблицу? ............................................................................... 159
RECREATE TABLE ........................................................................................................ 159Примеры ................................................................................................................ 159
INDEX ..................................................................................................................................... 160CREATE INDEX ............................................................................................................. 160
Уникальные индексы ............................................................................................ 161Направление индекса .......................................................................................... 161Вычисляемые индексы или индексы по выражению ........................................ 161Ограничения на индексы ..................................................................................... 161
Ограничения на длину индексируемой строки .......................................... 161Максимальное количество индексов на таблицу .............................................. 162Кто может создать индекс? ................................................................................. 162Примеры ................................................................................................................ 162
ALTER INDEX ................................................................................................................ 163Использование ALTER INDEX для индексов ограничений ............................... 164Кто может выполнить ALTER INDEX? ................................................................ 164Примеры ................................................................................................................ 164
DROP INDEX ................................................................................................................. 164Кто может удалить индекс? ................................................................................. 165Примеры ................................................................................................................ 165
SET STATISTICS ........................................................................................................... 165Селективность индекса ........................................................................................ 166Кто может обновить статистику? ........................................................................ 166Примеры ................................................................................................................ 166
VIEW ...................................................................................................................................... 166CREATE VIEW ............................................................................................................... 167
Обновляемые представления ............................................................................. 168WITH CHECK OPTIONS ....................................................................................... 168Привилегии выполнения ...................................................................................... 169Кто может создать представление? .................................................................... 169Примеры ................................................................................................................ 169
ALTER VIEW .................................................................................................................. 172Кто может изменить представление? ................................................................. 172Примеры ................................................................................................................ 173
CREATE OR ALTER VIEW ........................................................................................... 173Примеры ................................................................................................................ 173
DROP VIEW ................................................................................................................... 174Кто может удалить представление? ................................................................... 174Примеры ................................................................................................................ 174
RECREATE VIEW .......................................................................................................... 174Примеры: ............................................................................................................... 175
TRIGGER ............................................................................................................................... 175CREATE TRIGGER ....................................................................................................... 176
Привилегии выполнения ...................................................................................... 178Тело триггера ........................................................................................................ 179Терминатор оператора ......................................................................................... 179DML триггеры (на таблицу или представление) ................................................ 179
Форма объявления ....................................................................................... 179Состояние триггера ...................................................................................... 179Фаза ................................................................................................................ 179События ......................................................................................................... 179
7
Руководство по языку SQL СУБД Firebird 4.0
Порядок срабатывания ................................................................................. 180Тело триггера ................................................................................................ 180Внешние триггеры ........................................................................................ 180Кто может создать DML триггер? ................................................................ 180Примеры ........................................................................................................ 180
Триггеры на событие базы данных ..................................................................... 182Выполнение триггеров на событие базы данных и обработкаисключений .................................................................................................... 182Двухфазное подтверждение транзакций .................................................... 183Предостережения ......................................................................................... 183Кто может создать триггеры на события базы данных? ........................... 183Примеры ........................................................................................................ 183
Триггеры на события изменения метаданных ................................................... 184Пространство имён DDL_TRIGGER ............................................................ 185Отключение триггеров .................................................................................. 185Кто может создать триггеры на события изменения метаданных? .......... 185Примеры ........................................................................................................ 185
ALTER TRIGGER .......................................................................................................... 190Допустимые изменения ........................................................................................ 190Кто может изменить триггеры? ........................................................................... 191Примеры ................................................................................................................ 191
CREATE OR ALTER TRIGGER .................................................................................... 192Примеры ................................................................................................................ 193
DROP TRIGGER ........................................................................................................... 193Кто может удалить триггеры? ............................................................................. 193Примеры ................................................................................................................ 194
RECREATE TRIGGER ................................................................................................... 194Примеры ................................................................................................................ 194
PROCEDURE ......................................................................................................................... 195CREATE PROCEDURE ................................................................................................. 195
Терминатор оператора ......................................................................................... 198Параметры ............................................................................................................. 198
Входные параметры ..................................................................................... 198Выходные параметры ................................................................................... 198Использование доменов при объявлении параметров ............................. 198Использование типа столбца при объявлении параметров ..................... 198
Привилегии выполнения ...................................................................................... 199Тело хранимой процедуры .................................................................................. 199
Объявление локальных переменных, курсоров и подпрограмм .............. 199Внешние хранимые процедуры ........................................................................... 199Кто может создать хранимую процедуру? ......................................................... 200Примеры ................................................................................................................ 200
ALTER PROCEDURE .................................................................................................... 201Кто может изменить хранимую процедуру? ....................................................... 202Примеры ................................................................................................................ 202
CREATE OR ALTER PROCEDURE .............................................................................. 202Примеры ................................................................................................................ 203
DROP PROCEDURE ..................................................................................................... 203Кто может удалить хранимую процедуру? ......................................................... 203Примеры ................................................................................................................ 204
RECREATE PROCEDURE ............................................................................................ 204Примеры ................................................................................................................ 204
8
Руководство по языку SQL СУБД Firebird 4.0
FUNCTION ............................................................................................................................. 205CREATE FUNCTION ..................................................................................................... 205
Терминатор оператора ......................................................................................... 208Входные параметры ............................................................................................. 208Использование доменов при объявлении параметров ..................................... 208Использование типа столбца при объявлении параметров ............................. 209Возвращаемое значение ...................................................................................... 209Детерминированные функции ............................................................................. 209Привилегии выполнения ...................................................................................... 210Тело хранимой функции ...................................................................................... 210
Объявление локальных переменных, курсоров и подпрограмм .............. 211Внешние функции ................................................................................................. 211Кто может создать функцию? .............................................................................. 211Примеры ................................................................................................................ 211
ALTER FUNCTION ........................................................................................................ 214Кто может изменить функцию? ........................................................................... 215Примеры ................................................................................................................ 215
CREATE OR ALTER FUNCTION .................................................................................. 215Примеры ................................................................................................................ 216
DROP FUNCTION ......................................................................................................... 216Кто может удалить функцию? ............................................................................. 216Примеры ................................................................................................................ 216
RECREATE FUNCTION ................................................................................................ 217Примеры ................................................................................................................ 217
PACKAGE .............................................................................................................................. 217PACKAGE ....................................................................................................................... 218
CREATE PACKAGE ............................................................................................... 218Привилегии выполнения .............................................................................. 220Терминатор оператора ................................................................................. 220Параметры процедур и функций ................................................................. 221Детерминированные функции ..................................................................... 221Кто может создать пакет? ............................................................................ 222Примеры ........................................................................................................ 222
ALTER PACKAGE .................................................................................................. 222Кто может изменить заголовок пакета? ...................................................... 223Примеры ........................................................................................................ 223
CREATE OR ALTER PACKAGE ............................................................................ 223Примеры ........................................................................................................ 224
DROP PACKAGE ................................................................................................... 224Кто может удалить заголовок пакета? ........................................................ 225Примеры ........................................................................................................ 225
RECREATE PACKAGE .......................................................................................... 225Примеры ........................................................................................................ 226
PACKAGE BODY ........................................................................................................... 226CREATE PACKAGE BODY ................................................................................... 226
Кто может создать тело пакета? ................................................................. 230Примеры ........................................................................................................ 230
ALTER PACKAGE BODY ...................................................................................... 231Кто может изменить тело пакета? .............................................................. 232Примеры ........................................................................................................ 232
DROP PACKAGE BODY ....................................................................................... 233Кто может удалить тело пакета? ................................................................. 233
9
Руководство по языку SQL СУБД Firebird 4.0
Примеры ........................................................................................................ 233RECREATE PACKAGE BODY .............................................................................. 233
Примеры ........................................................................................................ 234EXTERNAL FUNCTION ......................................................................................................... 235
DECLARE EXTERNAL FUNCTION .............................................................................. 235Кто может объявить внешнюю функцию? .......................................................... 237Примеры ................................................................................................................ 238
ALTER EXTERNAL FUNCTION .................................................................................... 238Кто может изменить внешнюю функцию? .......................................................... 239Примеры ................................................................................................................ 239
DROP EXTERNAL FUNCTION ..................................................................................... 239Кто может удалить внешнюю функцию? ............................................................ 240Примеры ................................................................................................................ 240
FILTER ................................................................................................................................... 240DECLARE FILTER ......................................................................................................... 240
Задание подтипов ................................................................................................. 241Параметры DECLARE FILTER ............................................................................. 242Кто может создать BLOB фильтр? ...................................................................... 242Примеры ................................................................................................................ 242
DROP FILTER ................................................................................................................ 242Кто может удалить BLOB фильтр? ..................................................................... 243Примеры ................................................................................................................ 243
SEQUENCE (GENERATOR) ................................................................................................. 243CREATE SEQUENCE .................................................................................................... 244
Кто может создать последовательность? .......................................................... 244Примеры ................................................................................................................ 244
ALTER SEQUENCE ....................................................................................................... 245Кто может изменить последовательность? ........................................................ 246Примеры ................................................................................................................ 246
CREATE OR ALTER SEQUENCE ................................................................................ 247Примеры ................................................................................................................ 247
DROP SEQUENCE ........................................................................................................ 248Кто может удалить генератор? ............................................................................ 248Примеры ................................................................................................................ 248
RECREATE SEQUENCE ............................................................................................... 248Примеры ................................................................................................................ 249
SET GENERATOR ......................................................................................................... 249Кто может изменить значение генератора? ....................................................... 250Примеры ................................................................................................................ 250
EXCEPTION ........................................................................................................................... 250CREATE EXCEPTION ................................................................................................... 251
Кто может создать исключение? ......................................................................... 252Примеры ................................................................................................................ 252
ALTER EXCEPTION ...................................................................................................... 252Кто может изменить исключение? ...................................................................... 253Примеры ................................................................................................................ 253
CREATE OR ALTER EXCEPTION ................................................................................ 253Примеры ................................................................................................................ 253
DROP EXCEPTION ....................................................................................................... 254Кто может удалить исключение? ........................................................................ 254Примеры ................................................................................................................ 254
RECREATE EXCEPTION .............................................................................................. 254
10
Руководство по языку SQL СУБД Firebird 4.0
Примеры ................................................................................................................ 255COLLATION ........................................................................................................................... 255
CREATE COLLATION .................................................................................................... 256Специфичные атрибуты ....................................................................................... 257Кто может создать сортировку? .......................................................................... 258Примеры ................................................................................................................ 258
DROP COLLATION ........................................................................................................ 259Кто может удалить сортировку? .......................................................................... 260Примеры ................................................................................................................ 260
CHARACTER SET ................................................................................................................. 260ALTER CHARACTER SET ............................................................................................ 260
Примеры ................................................................................................................ 261COMMENTS ........................................................................................................................... 261
COMMENT ON .............................................................................................................. 261Кто может добавить комментарий? .................................................................... 262Примеры ................................................................................................................ 262
5. Операторы DML ....................................................................................................................... 264SELECT .................................................................................................................................. 264
FIRST, SKIP ................................................................................................................... 265Особенности использования ............................................................................... 266
Список полей SELECT ................................................................................................. 267FROM ............................................................................................................................. 271
Выборка из таблицы или представления ........................................................... 272Выборка из селективной хранимой процедуры ................................................. 273Выборка из производной таблицы (derived table) .............................................. 274Выборка из общих табличных выражений (CTE) .............................................. 278
Соединения (JOINS) ..................................................................................................... 280Внутренние (INNER) и внешние (OUTER) соединения ..................................... 281Обычные соединения ........................................................................................... 284
Соединения с явными условиями ............................................................... 284Соединения именованными столбцами ..................................................... 285
Естественные соединения (Natural Joins) .......................................................... 286Неявные соединения ........................................................................................... 287Смешивание явного и неявного соединения ..................................................... 288Перекрёстное соединение (CROSS JOIN) ......................................................... 288Неоднозначные имена полей в соединениях .................................................... 289Соединения с хранимыми процедурами ............................................................ 290
WHERE .......................................................................................................................... 290GROUP BY .................................................................................................................... 293
HAVING .................................................................................................................. 297WINDOW ........................................................................................................................ 298PLAN .............................................................................................................................. 300UNION ............................................................................................................................ 308ORDER BY .................................................................................................................... 310
Направление сортировки ..................................................................................... 311Порядок сравнения ............................................................................................... 311Расположение NULL ............................................................................................. 311Сортировка частей UNION .................................................................................. 311
ROWS ............................................................................................................................ 313Особенности при использовании ROWS с одним аргументом ......................... 314Особенности при использовании ROWS с двумя аргументами ....................... 314Замена FIRST..SKIP .............................................................................................. 315
11
Руководство по языку SQL СУБД Firebird 4.0
Совместное использование FIRST..SKIP и ROWS ............................................ 315Использование ROWS в UNION ......................................................................... 315Примеры ................................................................................................................ 315
FETCH, OFFSET ........................................................................................................... 316FOR UPDATE [OF] ........................................................................................................ 317WITH LOCK ................................................................................................................... 318
Использование предложения FOR UPDATE ...................................................... 319Как сервер работает с WITH LOCK .................................................................... 320Предостережения при использовании WITH LOCK .......................................... 320
INTO ............................................................................................................................... 321Общие табличные выражения CTE ("WITH ... AS ... SELECT") ................................ 322
Рекурсивные CTE ................................................................................................. 324INSERT .................................................................................................................................. 326
INSERT ... VALUES ....................................................................................................... 328Ключевое слово DEFAULT ................................................................................... 328
INSERT ... SELECT ....................................................................................................... 329INSERT ... DEFAULT VALUES ...................................................................................... 329Директива OVERRIDING .............................................................................................. 330RETURNING .................................................................................................................. 330
UPDATE ................................................................................................................................. 332SET ................................................................................................................................. 333
Ключевое слово DEFAULT ................................................................................... 333WHERE .......................................................................................................................... 334PLAN .............................................................................................................................. 334ORDER BY и ROWS .................................................................................................... 335RETURNING .................................................................................................................. 335
INTO ....................................................................................................................... 336UPDATE OR INSERT ............................................................................................................ 336
Ключевое слово DEFAULT ........................................................................................... 338RETURNING .................................................................................................................. 338
DELETE .................................................................................................................................. 339WHERE .......................................................................................................................... 339PLAN .............................................................................................................................. 340ORDER BY и ROWS .................................................................................................... 340RETURNING .................................................................................................................. 341
MERGE .................................................................................................................................. 342EXECUTE PROCEDURE ...................................................................................................... 346
"Выполняемые" хранимые процедуры ....................................................................... 347EXECUTE BLOCK ................................................................................................................. 348
Входные и выходные параметры ................................................................................ 351Терминатор оператора ................................................................................................. 352
6. Процедурный язык PSQL ........................................................................................................ 353Элементы PSQL ................................................................................................................... 353
DML операторы с параметрами .................................................................................. 353Транзакции .................................................................................................................... 353Структура модуля ......................................................................................................... 354
Заголовок модуля ................................................................................................. 354Привилегии выполнения PSQL кода .................................................................. 354Секция деклараций .............................................................................................. 354Тело модуля .......................................................................................................... 354
Хранимые процедуры .......................................................................................................... 356Преимущества хранимых процедур ........................................................................... 356
12
Руководство по языку SQL СУБД Firebird 4.0
Типы хранимых процедур ............................................................................................ 356Создание хранимой процедуры .................................................................................. 357Изменение хранимой процедуры ................................................................................ 358Удаление хранимой процедуры .................................................................................. 359
Хранимые функции .............................................................................................................. 359Создание хранимой функции ...................................................................................... 359Изменение хранимой функции .................................................................................... 361Удаление хранимой функции ...................................................................................... 362
PSQL блоки ........................................................................................................................... 362Пакеты ................................................................................................................................... 363
Преимущества пакетов ................................................................................................ 363Создание пакета ........................................................................................................... 364Модификация пакета ................................................................................................... 368Удаление пакета ........................................................................................................... 370
Триггеры ................................................................................................................................ 370Порядок срабатывания ................................................................................................ 370DML триггеры ................................................................................................................ 370
Варианты триггеров .............................................................................................. 370Контекстные переменные NEW и OLD ............................................................... 371
Триггеры на события базы данных ............................................................................. 371DDL триггеры ................................................................................................................ 372
Переменные доступные в пространстве имён DDL_TRIGGER ........................ 372Создание триггера ........................................................................................................ 372Изменение триггера ..................................................................................................... 374Удаление триггера ........................................................................................................ 376
Написание кода тела модуля .............................................................................................. 376Оператор присваивания .............................................................................................. 376DECLARE VARIABLE .................................................................................................... 377
Типы данных для переменных ............................................................................ 379DECLARE CURSOR ...................................................................................................... 380
Однонаправленные и прокручиваемые курсоры ............................................... 381Особенности использования курсора ................................................................. 381Примеры использования именованного курсора ............................................... 381
DECLARE PROCEDURE .............................................................................................. 382DECLARE FUNCTION ................................................................................................... 385BEGIN ... END ............................................................................................................... 387IF ... THEN ... ELSE ....................................................................................................... 388WHILE ... DO ................................................................................................................. 390BREAK ........................................................................................................................... 391LEAVE ............................................................................................................................ 391CONTINUE ..................................................................................................................... 393EXIT ................................................................................................................................ 394SUSPEND ...................................................................................................................... 395EXECUTE STATEMENT ................................................................................................ 396
Параметризованные операторы .......................................................................... 397Особенности использования параметризованных операторов ................ 397
WITH {AUTONOMOUS | COMMON} TRANSACTION .......................................... 400WITH CALLER PRIVILEGES ................................................................................ 400ON EXTERNAL [DATA SOURCE] ......................................................................... 400
Пул внешних подключений (External connection pool) ............................... 400Особенности внешних подключений .......................................................... 402Особенности пула транзакций (Transaction pooling) .................................. 402
13
Руководство по языку SQL СУБД Firebird 4.0
Особенности обработки исключений .......................................................... 403Другие замечания ......................................................................................... 403
AS USER, PASSWORD и ROLE .......................................................................... 403Предостережения ................................................................................................. 404
FOR SELECT ................................................................................................................. 404Необъявленный курсор ........................................................................................ 405
FOR EXECUTE STATEMENT ....................................................................................... 408OPEN ............................................................................................................................. 409FETCH ............................................................................................................................ 410CLOSE ........................................................................................................................... 414IN AUTONOMOUS TRANSACTION ............................................................................. 415POST_EVENT ................................................................................................................ 416Обработка ошибок ........................................................................................................ 417
Системные исключения ....................................................................................... 417Пользовательские исключения ............................................................................ 417EXCEPTION ........................................................................................................... 418WHEN ... DO .......................................................................................................... 421
Область действия оператора WHEN ... DO ................................................ 4227. Встроенные функции и переменные ..................................................................................... 425
Контекстные переменные .................................................................................................... 425CURRENT_CONNECTION ............................................................................................ 425CURRENT_DATE ........................................................................................................... 425CURRENT_ROLE .......................................................................................................... 426CURRENT_TIME ........................................................................................................... 427CURRENT_TIMESTAMP ............................................................................................... 427CURRENT_TRANSACTION .......................................................................................... 428CURRENT_USER .......................................................................................................... 429DELETING ...................................................................................................................... 429GDSCODE ..................................................................................................................... 430INSERTING .................................................................................................................... 431LOCALTIME ................................................................................................................... 431LOCALTIMESTAMP ....................................................................................................... 432NEW ............................................................................................................................... 433'NOW' ............................................................................................................................. 433OLD ................................................................................................................................ 435ROW_COUNT ................................................................................................................ 435SQLCODE ...................................................................................................................... 437SQLSTATE ..................................................................................................................... 437'TODAY' .......................................................................................................................... 438'TOMORROW' ................................................................................................................ 439UPDATING ..................................................................................................................... 440'YERSTERDAY' .............................................................................................................. 440USER .............................................................................................................................. 441
Скалярные функции ............................................................................................................. 441Функции для работы с контекстными переменными ................................................ 441
RDB$GET_CONTEXT ............................................................................................ 441RDB$SET_CONTEXT ............................................................................................ 445
Функции подсистемы безопасности ............................................................................ 447RDB$ROLE_IN_USE ............................................................................................. 447RDB$SYSTEM_PRIVILEGE .................................................................................. 448
Функции для обработки ошибок ................................................................................. 448RDB$ERROR ......................................................................................................... 448
14
Руководство по языку SQL СУБД Firebird 4.0
Функции работы с транзакциями ................................................................................ 449RDB$GET_TRANSACTION_CN ............................................................................ 449
Математические функции ............................................................................................ 450ABS ......................................................................................................................... 450ACOS ...................................................................................................................... 451ACOSH ................................................................................................................... 451ASIN ....................................................................................................................... 452ASINH ..................................................................................................................... 452ATAN ....................................................................................................................... 452ATAN2 ..................................................................................................................... 453ATANH .................................................................................................................... 453CEIL, CEILING ....................................................................................................... 454COS ........................................................................................................................ 454COSH ..................................................................................................................... 455COT ........................................................................................................................ 455EXP ......................................................................................................................... 455FLOOR ................................................................................................................... 456LN ........................................................................................................................... 456LOG ........................................................................................................................ 457LOG10 .................................................................................................................... 457MOD ....................................................................................................................... 458PI ............................................................................................................................ 458POWER .................................................................................................................. 458RAND ...................................................................................................................... 459ROUND ................................................................................................................... 459SIGN ....................................................................................................................... 460SIN .......................................................................................................................... 461SINH ....................................................................................................................... 461SQRT ...................................................................................................................... 461TAN ......................................................................................................................... 462TANH ...................................................................................................................... 462TRUNC ................................................................................................................... 463
Функции для работы со строками .............................................................................. 464ASCII_CHAR .......................................................................................................... 464ASCII_VAL .............................................................................................................. 464BIT_LENGTH .......................................................................................................... 465CHAR_LENGTH, CHARACTER_LENGTH ............................................................ 466LEFT ....................................................................................................................... 466LOWER ................................................................................................................... 467LPAD ....................................................................................................................... 468OCTET_LENGTH ................................................................................................... 469OVERLAY ............................................................................................................... 470POSITION ............................................................................................................... 471REPLACE ............................................................................................................... 472REVERSE ............................................................................................................... 473RIGHT ..................................................................................................................... 474RPAD ...................................................................................................................... 475SUBSTRING ........................................................................................................... 476TRIM ....................................................................................................................... 477UPPER .............................................................................................