Руководство по языку SQL СУБД Firebird 3 › download ›...

708
Руководство по языку SQL СУБД Firebird 3.0 18 сентября 2015 — v.0001-1 для Firebird 3.0 Beta 2 Спонсоры документации: Platinum Sponsor Gold Sponsor

Transcript of Руководство по языку SQL СУБД Firebird 3 › download ›...

  • Руководство по языкуSQL СУБД Firebird 3.0

    18 сентября 2015 — v.0001-1 для Firebird 3.0 Beta 2

    Спонсоры документации:Platinum Sponsor

    Gold Sponsor

    http://moex.com/http://www.ib-aid.com/

  • Руководство по языку SQL СУБД Firebird 3.0Над документом работали:Денис Симонов, Пол Винкенуг, Дмитрий Филиппов, Дмитрий Еманов, Томас Воинк, Александр Карпейкин,Дмитрий Кузьменко, Алексей Ковязин

    Редактор:Симонов Денис

  • 3

    СодержаниеВведение ......................................................................................................................................... 191. Общие сведения ........................................................................................................................ 21

    Подмножества SQL ................................................................................................................ 21Диалекты SQL ........................................................................................................................ 21Действия при ошибках ........................................................................................................... 22

    2. Структура языка ......................................................................................................................... 23Основные сведения: операторы, предложения, ключевые слова ..................................... 23Идентификаторы .................................................................................................................... 24Литералы ............................................................................................................................... 25Операторы и специальные символы ................................................................................... 25Комментарии ........................................................................................................................... 26

    3. Типы и подтипы данных ........................................................................................................... 27Целочисленные типы данных ............................................................................................... 29

    SMALLINT ........................................................................................................................ 29INTEGER .......................................................................................................................... 29BIGINT .............................................................................................................................. 30

    Типы данных с плавающей точкой ...................................................................................... 31FLOAT .............................................................................................................................. 31DOUBLE PRECISION ...................................................................................................... 31

    Типы данных с фиксированной точкой ................................................................................ 31NUMERIC ......................................................................................................................... 32DECIMAL .......................................................................................................................... 32

    Типы данных для работы с датой и временем ................................................................... 33DATE ................................................................................................................................ 33TIME ................................................................................................................................. 33TIMESTAMP ..................................................................................................................... 34Операции, использующие значения даты и времени ................................................. 34

    Символьные типы данных ..................................................................................................... 35UNICODE ......................................................................................................................... 35Набор символов клиента ............................................................................................... 36Специальные наборы символов ................................................................................... 36Последовательность сортировки .................................................................................. 36

    Регистронезависимый поиск ................................................................................. 36Последовательности сортировки для UTF-8 ....................................................... 37

    Индексирование символьных типов ............................................................................. 37CHAR ............................................................................................................................... 38VARCHAR ........................................................................................................................ 38NCHAR ............................................................................................................................. 39Строковые литералы ..................................................................................................... 39

    Альтернативы для апострофов в строковых литералах .................................... 39BOOLEAN ................................................................................................................................ 40Бинарные типы данных ......................................................................................................... 42

    BLOB ................................................................................................................................ 42Подтипы BLOB ........................................................................................................ 43Особенности BLOB ................................................................................................. 43

    Массивы ........................................................................................................................... 44Специальные типы данных ................................................................................................... 45

    Тип данных SQL_NULL .................................................................................................. 45Преобразование типов данных ............................................................................................. 46

    Явное преобразование типов данных .......................................................................... 47Преобразование к домену ..................................................................................... 47

  • Руководство по языку SQL СУБД Firebird 3.0

    4

    Преобразование к типу столбца ........................................................................... 47Допустимые преобразования для функции CAST ............................................... 47Преобразование литералов дат и времени ......................................................... 48Сокращённое приведение типов даты и времени (datetime) ............................. 51

    Неявное преобразование типов данных ...................................................................... 51Пользовательские типы данных — домены ........................................................................ 52

    Атрибуты домена ........................................................................................................... 52Переопределение свойств доменов ............................................................................. 53Создание доменов ......................................................................................................... 53Изменение доменов ....................................................................................................... 54Удаление доменов ......................................................................................................... 55

    4. Общие элементы языка ............................................................................................................ 56Выражения .............................................................................................................................. 56

    Операторы SQL .............................................................................................................. 58Приоритет операторов ........................................................................................... 58Оператор конкатенации ......................................................................................... 58Арифметические операторы ................................................................................. 59Операторы сравнения ............................................................................................ 59Логические операторы ........................................................................................... 59

    NEXT VALUE FOR .......................................................................................................... 60Условные выражения ..................................................................................................... 60

    CASE ........................................................................................................................ 61NULL в выражениях ....................................................................................................... 62

    Выражения возвращающие NULL ........................................................................ 62NULL в логических выражениях ............................................................................ 63

    Подзапросы ............................................................................................................................. 63Коррелированные подзапросы ..................................................................................... 63Подзапросы возвращающие скалярный результат (Singletons) ................................ 64

    Предикаты ............................................................................................................................... 65Утверждения ................................................................................................................... 65Предикаты сравнения .................................................................................................... 65Другие предикаты сравнения ........................................................................................ 66

    BETWEEN ................................................................................................................ 66LIKE .......................................................................................................................... 66

    Трафаретные символы .................................................................................. 67Использование управляющего символа в предложении ESCAPE ............. 67

    STARTING WITH ..................................................................................................... 68CONTAINING ........................................................................................................... 69SIMILAR TO ............................................................................................................. 69

    Синтаксис регулярных выражений SQL ....................................................... 70Создание регулярных выражений ................................................................ 71

    IS DISTINCT FROM ................................................................................................ 75IS .............................................................................................................................. 76

    IS NULL ............................................................................................................................ 77Предикаты существования ............................................................................................ 77

    EXISTS ..................................................................................................................... 77IN .............................................................................................................................. 78SINGULAR ............................................................................................................... 80

    Количественные предикаты подзапросов .................................................................... 81ALL ........................................................................................................................... 81ANY и SOME ........................................................................................................... 82

    5. Операторы DDL ......................................................................................................................... 83

  • Руководство по языку SQL СУБД Firebird 3.0

    5

    DATABASE .............................................................................................................................. 83CREATE DATABASE ...................................................................................................... 83

    Использование псевдонимов БД .......................................................................... 85Создание удалённых БД ....................................................................................... 85Необязательные параметры CREATE DATABASE ............................................. 86Кто может создать базу данных? ......................................................................... 87Примеры .................................................................................................................. 87

    ALTER DATABASE ......................................................................................................... 89Добавление вторичного файла ............................................................................. 90Изменение пути и имени дельта файла .............................................................. 90Перевод базы данных в режим "безопасного копирования" .............................. 90Изменение набора символов по умолчанию ....................................................... 91LINGER .................................................................................................................... 91Шифрование базы данных .................................................................................... 92Кто может выполнить ALTER DATABASE? .......................................................... 92Примеры .................................................................................................................. 92

    DROP DATABASE ........................................................................................................... 93Кто может удалить базу данных? ......................................................................... 94Примеры .................................................................................................................. 94

    SHADOW ................................................................................................................................. 94CREATE SHADOW ......................................................................................................... 94

    Режимы AUTO и MANUAL ..................................................................................... 95Необязательные параметры CREATE SHADOW ................................................ 96Кто может создать теневую копию? ..................................................................... 96Примеры .................................................................................................................. 96

    DROP SHADOW .............................................................................................................. 96Кто может удалить теневую копию? .................................................................... 97Примеры .................................................................................................................. 97

    DOMAIN ................................................................................................................................... 97CREATE DOMAIN ........................................................................................................... 98

    Кто может создать домен? .................................................................................. 101Примеры ................................................................................................................ 101

    ALTER DOMAIN ............................................................................................................ 102Что не может изменить ALTER DOMAIN ........................................................... 105Кто может изменить домен? ............................................................................... 105Примеры ................................................................................................................ 106

    DROP DOMAIN ............................................................................................................. 106Кто может удалить домен? ................................................................................. 107Примеры ................................................................................................................ 107

    TABLE .................................................................................................................................... 107CREATE TABLE ............................................................................................................ 108

    Символьные столбцы ........................................................................................... 111Ограничение NOT NULL ...................................................................................... 112Значение по умолчанию ...................................................................................... 112Столбцы основанные на домене ........................................................................ 112Столбцы идентификации (автоинкремент) ........................................................ 112Вычисляемые поля ............................................................................................... 113Столбцы типа массив .......................................................................................... 113Ограничения .......................................................................................................... 113

    Именованные ограничения .......................................................................... 114Автоматически создаваемые индексы ....................................................... 114Первичный ключ (PRIMARY KEY) ............................................................... 114

  • Руководство по языку SQL СУБД Firebird 3.0

    6

    Ограничение уникальности (UNIQUE) ........................................................ 114Внешний ключ (FOREIGN KEY) .................................................................. 115Ограничение CHECK .................................................................................... 116

    Кто может создать таблицу? ............................................................................... 117Примеры ................................................................................................................ 117Глобальные временные таблицы (GTT) ............................................................ 119

    Примеры ........................................................................................................ 120Внешние таблицы ................................................................................................. 120

    Примеры ........................................................................................................ 120ALTER TABLE ............................................................................................................... 120

    ALTER TABLE ....................................................................................................... 125Предложение ADD ................................................................................................ 125Предложение DROP ............................................................................................. 125Предложение DROP CONSTRAINT .................................................................... 126Предложение ALTER [COLUMN] ......................................................................... 126

    Переименование столбца ............................................................................ 126Изменение типа столбца ............................................................................. 126Изменение позиции столбца ....................................................................... 127Установка и удаление значения по умолчанию ........................................ 127Установка и удаление ограничения NOT NULL ......................................... 127Изменение столбцов идентификации ......................................................... 127Изменение вычисляемых столбцов ............................................................ 127Не изменяемые атрибуты ............................................................................ 128

    Кто может изменить таблицу? ............................................................................ 128Примеры ................................................................................................................ 128

    DROP TABLE ................................................................................................................ 129Кто может удалить таблицу? .............................................................................. 130Примеры ................................................................................................................ 130

    RECREATE TABLE ....................................................................................................... 130Примеры ................................................................................................................ 130

    INDEX .................................................................................................................................... 131CREATE INDEX ............................................................................................................. 131

    Уникальные индексы ............................................................................................ 132Направление индекса .......................................................................................... 132Вычисляемые индексы или индексы по выражению ........................................ 132Ограничения на индексы ..................................................................................... 132

    Ограничения на длину индексируемой строки .......................................... 133Максимальное количество индексов на таблицу .............................................. 133Кто может создать индекс? ................................................................................. 133Примеры ................................................................................................................ 133

    ALTER INDEX ................................................................................................................ 134Кто может выполнить ALTER INDEX? ................................................................ 135Примеры ................................................................................................................ 135

    DROP INDEX ................................................................................................................. 136Кто может удалить индекс? ................................................................................ 136Примеры ................................................................................................................ 136

    SET STATISTICS .......................................................................................................... 137Селективность индекса ........................................................................................ 137Кто может обновить статистику? ........................................................................ 137Примеры ................................................................................................................ 138

    VIEW ...................................................................................................................................... 138CREATE VIEW .............................................................................................................. 138

  • Руководство по языку SQL СУБД Firebird 3.0

    7

    Обновляемые представления ............................................................................. 139WITH CHECK OPTIONS ....................................................................................... 139Кто может создать представление? ................................................................... 140Примеры ................................................................................................................ 140

    ALTER VIEW ................................................................................................................. 142Кто может изменить представление? ................................................................ 143Примеры ................................................................................................................ 143

    CREATE OR ALTER VIEW ........................................................................................... 144Примеры ................................................................................................................ 144

    DROP VIEW ................................................................................................................... 145Кто может удалить представление? ................................................................... 145Примеры ................................................................................................................ 145

    RECREATE VIEW ......................................................................................................... 146Примеры: ............................................................................................................... 146

    TRIGGER ............................................................................................................................... 147CREATE TRIGGER ....................................................................................................... 147

    Табличные триггеры ............................................................................................. 149Форма объявления ....................................................................................... 150Состояние триггера ...................................................................................... 150Фаза ............................................................................................................... 150События таблицы ......................................................................................... 150Порядок срабатывания ................................................................................ 150Тело табличного триггера ............................................................................ 150Внешние триггеры ........................................................................................ 151Кто может создать табличный триггер? ..................................................... 151Примеры ........................................................................................................ 151

    Триггеры на событие базы данных .................................................................... 152Выполнение триггеров на событие базы данных и обработкаисключений .................................................................................................... 152Двухфазное подтверждение транзакций .................................................... 153Отключение триггеров .................................................................................. 153Предостережения ......................................................................................... 153Кто может создать триггеры на события базы данных? ........................... 153Примеры ........................................................................................................ 153

    Триггеры на события изменения метаданных ................................................... 154Пространство имён DDL_TRIGGER ............................................................ 155Отключение триггеров .................................................................................. 156Кто может создать триггеры на события базы данных? ........................... 156Примеры ........................................................................................................ 156

    ALTER TRIGGER .......................................................................................................... 160Допустимые изменения ........................................................................................ 161Кто может изменить триггеры? ........................................................................... 162Примеры ................................................................................................................ 162

    CREATE OR ALTER TRIGGER .................................................................................... 163Примеры ................................................................................................................ 164

    DROP TRIGGER ........................................................................................................... 164Кто может удалить триггеры? ............................................................................. 164Примеры ................................................................................................................ 165

    RECREATE TRIGGER .................................................................................................. 165Примеры ................................................................................................................ 166

    PROCEDURE ........................................................................................................................ 166CREATE PROCEDURE ................................................................................................. 166

  • Руководство по языку SQL СУБД Firebird 3.0

    8

    Параметры ............................................................................................................ 169Входные параметры ..................................................................................... 169Выходные параметры .................................................................................. 169Использование доменов при объявлении параметров ............................. 170Использование типа столбца при объявлении параметров ..................... 170

    Объявление локальных переменных, курсоров и подпрограмм ...................... 170Внешние хранимые процедуры .......................................................................... 170Кто может создать хранимую процедуру? ......................................................... 170Примеры ................................................................................................................ 171

    ALTER PROCEDURE .................................................................................................... 171Кто может изменить хранимую процедуру? ...................................................... 172Примеры ................................................................................................................ 172

    CREATE OR ALTER PROCEDURE ............................................................................. 173Примеры ................................................................................................................ 173

    DROP PROCEDURE ..................................................................................................... 174Кто может удалить хранимую процедуру? ........................................................ 174Примеры ................................................................................................................ 175

    RECREATE PROCEDURE ............................................................................................ 175Примеры ................................................................................................................ 175

    FUNCTION ............................................................................................................................. 176CREATE FUNCTION ..................................................................................................... 176

    Входные параметры ............................................................................................. 179Использование доменов при объявлении параметров .................................... 179Использование типа столбца при объявлении параметров ............................. 179Возвращаемое значение ..................................................................................... 179Детерминированные функции ............................................................................. 180Объявление локальных переменных, курсоров и подпрограмм ...................... 180Внешние функции ................................................................................................. 181Кто может создать функцию? ............................................................................. 181Примеры ................................................................................................................ 181

    ALTER FUNCTION ........................................................................................................ 183Кто может изменить функцию? ........................................................................... 184Примеры ................................................................................................................ 184

    CREATE OR ALTER FUNCTION ................................................................................. 185Примеры ................................................................................................................ 185

    DROP FUNCTION ......................................................................................................... 185Кто может удалить функцию? ............................................................................. 186Примеры ................................................................................................................ 186

    RECREATE FUNCTION ................................................................................................ 186Примеры ................................................................................................................ 187

    PACKAGE .............................................................................................................................. 187PACKAGE ...................................................................................................................... 187

    CREATE PACKAGE .............................................................................................. 187Параметры процедур и функций ................................................................ 190Детерминированные функции ..................................................................... 191Кто может создать пакет? ........................................................................... 191Примеры ........................................................................................................ 191

    ALTER PACKAGE ................................................................................................. 192Кто может изменить заголовок пакета? ..................................................... 192Примеры ........................................................................................................ 193

    CREATE OR ALTER PACKAGE ........................................................................... 193Примеры ........................................................................................................ 194

  • Руководство по языку SQL СУБД Firebird 3.0

    9

    DROP PACKAGE ................................................................................................... 194Кто может удалить заголовок пакета? ....................................................... 194Примеры ........................................................................................................ 195

    RECREATE PACKAGE ......................................................................................... 195Примеры ........................................................................................................ 195

    PACKAGE BODY ........................................................................................................... 196CREATE PACKAGE BODY ................................................................................... 196

    Кто может создать тело пакета? ................................................................ 200Примеры ........................................................................................................ 200

    ALTER PACKAGE BODY ...................................................................................... 201Кто может изменить тело пакета? .............................................................. 202Примеры ........................................................................................................ 202

    DROP PACKAGE BODY ....................................................................................... 203Кто может удалить тело пакета? ................................................................ 203Примеры ........................................................................................................ 204

    RECREATE PACKAGE BODY .............................................................................. 204Примеры ........................................................................................................ 205

    EXTERNAL FUNCTION ........................................................................................................ 205DECLARE EXTERNAL FUNCTION .............................................................................. 206

    Кто может объявить внешнюю функцию? ......................................................... 208Примеры ................................................................................................................ 208

    ALTER EXTERNAL FUNCTION .................................................................................... 209Кто может изменить внешнюю функцию? .......................................................... 209Примеры ................................................................................................................ 210

    DROP EXTERNAL FUNCTION ..................................................................................... 210Кто может удалить внешнюю функцию? ............................................................ 210Примеры ................................................................................................................ 211

    FILTER ................................................................................................................................... 211DECLARE FILTER ......................................................................................................... 211

    Задание подтипов ................................................................................................ 212Параметры DECLARE FILTER ............................................................................ 212Кто может создать BLOB фильтр? ..................................................................... 213Примеры ................................................................................................................ 213

    DROP FILTER ............................................................................................................... 213Кто может удалить BLOB фильтр? ..................................................................... 214Примеры ................................................................................................................ 214

    SEQUENCE (GENERATOR) ................................................................................................. 214CREATE {SEQUENCE | GENERATOR} ....................................................................... 215

    Кто может создать последовательность? .......................................................... 215Примеры ................................................................................................................ 216

    ALTER {SEQUENCE | GENERATOR} .......................................................................... 216Кто может изменить последовательность? ....................................................... 217Примеры ................................................................................................................ 218

    CREATE OR ALTER {SEQUENCE | GENERATOR} .................................................... 218Примеры ................................................................................................................ 219

    DROP {SEQUENCE | GENERATOR} ........................................................................... 219Кто может удалить генератор? ........................................................................... 219Примеры ................................................................................................................ 220

    RECREATE {SEQUENCE | GENERATOR} .................................................................. 220Примеры ................................................................................................................ 220

    SET GENERATOR ........................................................................................................ 220Кто может изменить значение генератора? ...................................................... 221

  • Руководство по языку SQL СУБД Firebird 3.0

    10

    EXCEPTION ........................................................................................................................... 221CREATE EXCEPTION ................................................................................................... 222

    Кто может создать исключение? ........................................................................ 222Примеры ................................................................................................................ 223

    ALTER EXCEPTION ...................................................................................................... 223Кто может изменить исключение? ...................................................................... 223Примеры ................................................................................................................ 224

    CREATE OR ALTER EXCEPTION ............................................................................... 224Примеры ................................................................................................................ 225

    DROP EXCEPTION ....................................................................................................... 225Кто может удалить исключение? ........................................................................ 225Примеры ................................................................................................................ 225

    RECREATE EXCEPTION .............................................................................................. 226Примеры ................................................................................................................ 226

    COLLATION ........................................................................................................................... 226CREATE COLLATION ................................................................................................... 227

    Специфичные атрибуты ....................................................................................... 228Кто может создать сортировку? .......................................................................... 229Примеры ................................................................................................................ 230

    DROP COLLATION ....................................................................................................... 231Кто может удалить сортировку? ......................................................................... 231Примеры ................................................................................................................ 231

    CHARACTER SET ................................................................................................................. 232ALTER CHARACTER SET ............................................................................................ 232

    Примеры ................................................................................................................ 232COMMENTS .......................................................................................................................... 233

    COMMENT ON .............................................................................................................. 233Кто может добавить комментарий? .................................................................... 234Примеры ................................................................................................................ 234

    6. Операторы DML ....................................................................................................................... 236SELECT ................................................................................................................................. 236

    FIRST, SKIP ................................................................................................................... 237Особенности использования ............................................................................... 238

    Список полей SELECT ................................................................................................. 239FROM ............................................................................................................................. 243

    Выборка из таблицы или представления .......................................................... 244Выборка из селективной хранимой процедуры ................................................. 245Выборка из производной таблицы (derived table) ............................................. 247Выборка из общих табличных выражений (CTE) .............................................. 251

    Соединения (JOINS) ..................................................................................................... 253Внутренние (INNER) и внешние (OUTER) соединения ..................................... 254Обычные соединения ........................................................................................... 257

    Соединения с явными условиями ............................................................... 257Соединения именованными столбцами ..................................................... 258

    Естественные соединения (Natural Joins) .......................................................... 259Неявные соединения ........................................................................................... 260Смешивание явного и неявного соединения ..................................................... 261Перекрёстное соединение (CROSS JOIN) ......................................................... 261Неоднозначные имена полей в соединениях .................................................... 262Соединения с хранимыми процедурами ............................................................ 263

    WHERE .......................................................................................................................... 263GROUP BY .................................................................................................................... 266

  • Руководство по языку SQL СУБД Firebird 3.0

    11

    HAVING .................................................................................................................. 270PLAN .............................................................................................................................. 271UNION ............................................................................................................................ 279ORDER BY .................................................................................................................... 281

    Направление сортировки ..................................................................................... 282Порядок сравнения .............................................................................................. 283Расположение NULL ............................................................................................ 283Сортировка частей UNION .................................................................................. 283

    ROWS ............................................................................................................................ 285Особенности при использовании ROWS с одним аргументом ........................ 286Особенности при использовании ROWS с двумя аргументами ....................... 286Замена FIRST..SKIP ............................................................................................. 286Совместное использование FIRST..SKIP и ROWS ........................................... 286Использование ROWS в UNION ......................................................................... 286Примеры ................................................................................................................ 287

    FETCH, OFFSET ........................................................................................................... 287WITH LOCK ................................................................................................................... 289INTO ............................................................................................................................... 292Общие табличные выражения CTE ("WITH ... AS ... SELECT") ................................ 293

    Рекурсивные CTE ................................................................................................. 295INSERT .................................................................................................................................. 297

    INSERT ... VALUES ....................................................................................................... 299INSERT ... SELECT ....................................................................................................... 299INSERT ... DEFAULT VALUES ..................................................................................... 300RETURNING .................................................................................................................. 300

    UPDATE ................................................................................................................................. 301SET ................................................................................................................................. 302WHERE .......................................................................................................................... 303ORDER BY и ROWS .................................................................................................... 304RETURNING .................................................................................................................. 304

    INTO ....................................................................................................................... 305UPDATE OR INSERT ............................................................................................................ 305

    RETURNING .................................................................................................................. 306DELETE ................................................................................................................................. 307

    WHERE .......................................................................................................................... 308PLAN .............................................................................................................................. 309ORDER BY и ROWS .................................................................................................... 309RETURNING .................................................................................................................. 310

    MERGE .................................................................................................................................. 310EXECUTE PROCEDURE ...................................................................................................... 315

    "Выполняемые" хранимые процедуры ....................................................................... 315EXECUTE BLOCK ................................................................................................................. 316

    Входные и выходные параметры ............................................................................... 320Терминатор оператора ................................................................................................ 320

    7. Процедурный язык PSQL ........................................................................................................ 322Элементы PSQL ................................................................................................................... 322

    DML операторы с параметрами ................................................................................. 322Транзакции .................................................................................................................... 322Структура модуля ......................................................................................................... 323

    Заголовок модуля ................................................................................................. 323Тело модуля .......................................................................................................... 323

    Хранимые процедуры .......................................................................................................... 325

  • Руководство по языку SQL СУБД Firebird 3.0

    12

    Преимущества хранимых процедур ........................................................................... 325Типы хранимых процедур ............................................................................................ 325Создание хранимой процедуры .................................................................................. 326Изменение хранимой процедуры ............................................................................... 326Удаление хранимой процедуры .................................................................................. 327

    Хранимые функции .............................................................................................................. 327Создание хранимой функции ...................................................................................... 327Изменение хранимой функции .................................................................................... 328Удаление хранимой функции ...................................................................................... 328

    PSQL блоки ........................................................................................................................... 329Пакеты ................................................................................................................................... 329

    Преимущества пакетов ................................................................................................ 330Создание пакета ........................................................................................................... 330Модификация пакета ................................................................................................... 335Удаление пакета ........................................................................................................... 336

    Триггеры ................................................................................................................................ 336Порядок срабатывания ................................................................................................ 336DML триггеры ................................................................................................................ 336

    Варианты триггеров ............................................................................................. 336Контекстные переменные NEW и OLD ............................................................... 337

    Триггеры на события базы данных ............................................................................ 337DDL триггеры ................................................................................................................ 338

    Переменные доступные в пространстве имён DDL_TRIGGER ........................ 338Создание триггера ........................................................................................................ 338Изменение триггера ..................................................................................................... 340Удаление триггера ....................................................................................................... 341

    Написание кода тела модуля ............................................................................................. 341Оператор присваивания .............................................................................................. 341DECLARE ....................................................................................................................... 342

    DECLARE VARIABLE ............................................................................................ 343Типы данных для переменных .................................................................... 344

    DECLARE CURSOR .............................................................................................. 345Однонаправленные и прокручиваемые курсоры ....................................... 346Особенности использования курсора ......................................................... 346Примеры использования именованного курсора ...................................... 347

    DECLARE PROCEDURE ...................................................................................... 348DECLARE FUNCTION ........................................................................................... 349

    BEGIN ... END ............................................................................................................... 351IF ... THEN ... ELSE ....................................................................................................... 352WHILE ... DO ................................................................................................................. 354LEAVE ............................................................................................................................ 355CONTINUE ..................................................................................................................... 356EXIT ................................................................................................................................ 357SUSPEND ...................................................................................................................... 358EXECUTE STATEMENT ............................................................................................... 359

    Параметризованные операторы ......................................................................... 360Особенности использования параметризованных операторов ................ 361

    WITH {AUTONOMOUS | COMMON} TRANSACTION .......................................... 362WITH CALLER PRIVILEGES ................................................................................ 362ON EXTERNAL [DATA SOURCE] ........................................................................ 363

    Особенности пула подключений (Connection pooling) ............................... 363Особенности пула транзакций (Transaction pooling) ................................. 363

  • Руководство по языку SQL СУБД Firebird 3.0

    13

    Особенности обработки исключений .......................................................... 363Другие замечания ......................................................................................... 363

    AS USER, PASSWORD и ROLE .......................................................................... 364Предостережения ................................................................................................. 364

    FOR SELECT ................................................................................................................. 365Необъявленный курсор ........................................................................................ 365

    FOR EXECUTE STATEMENT ....................................................................................... 369OPEN ............................................................................................................................. 370FETCH ............................................................................................................................ 370CLOSE ........................................................................................................................... 375IN AUTONOMOUS TRANSACTION ............................................................................. 375POST_EVENT ................................................................................................................ 377Обработка ошибок ........................................................................................................ 377

    EXCEPTION ........................................................................................................... 378WHEN ... DO .......................................................................................................... 381

    Область действия оператора WHEN ... DO ............................................... 3838. Встроенные функции и переменные ..................................................................................... 385

    Контекстные переменные .................................................................................................... 385CURRENT_CONNECTION ............................................................................................ 385CURRENT_DATE .......................................................................................................... 385CURRENT_ROLE .......................................................................................................... 386CURRENT_TIME ........................................................................................................... 386CURRENT_TIMESTAMP ............................................................................................... 387CURRENT_TRANSACTION .......................................................................................... 388CURRENT_USER .......................................................................................................... 388DELETING ...................................................................................................................... 389GDSCODE ..................................................................................................................... 389INSERTING .................................................................................................................... 390NEW ............................................................................................................................... 391'NOW' ............................................................................................................................. 392OLD ................................................................................................................................ 392ROW_COUNT ................................................................................................................ 393SQLCODE ...................................................................................................................... 394SQLSTATE ..................................................................................................................... 395'TODAY' .......................................................................................................................... 395'TOMORROW' ................................................................................................................ 396UPDATING ..................................................................................................................... 397'YERSTERDAY' .............................................................................................................. 397USER .............................................................................................................................. 398

    Скалярные функции ............................................................................................................. 398Функции для работы с контекстными переменными ................................................ 398

    RDB$GET_CONTEXT ........................................................................................... 398RDB$SET_CONTEXT ............................................................................................ 401

    Математические функции ............................................................................................ 403ABS ......................................................................................................................... 403ACOS ...................................................................................................................... 403ACOSH ................................................................................................................... 404ASIN ....................................................................................................................... 404ASINH ..................................................................................................................... 404ATAN ...................................................................................................................... 405ATAN2 .................................................................................................................... 405ATANH .................................................................................................................... 406

  • Руководство по языку SQL СУБД Firebird 3.0

    14

    CEIL, CEILING ....................................................................................................... 406COS ........................................................................................................................ 407COSH ..................................................................................................................... 407COT ........................................................................................................................ 407EXP ......................................................................................................................... 408FLOOR ................................................................................................................... 408LN ........................................................................................................................... 409LOG ........................................................................................................................ 409LOG10 .................................................................................................................... 410MOD ....................................................................................................................... 410PI ............................................................................................................................ 411POWER .................................................................................................................. 411RAND ...................................................................................................................... 411ROUND ................................................................................................................... 412SIGN ....................................................................................................................... 412SIN .......................................................................................................................... 413SINH ....................................................................................................................... 413SQRT ...................................................................................................................... 414TAN ......................................................................................................................... 414TANH ...................................................................................................................... 415TRUNC ................................................................................................................... 415

    Функции для работы со строками .............................................................................. 416ASCII_CHAR .......................................................................................................... 416ASCII_VAL .............................................................................................................. 416BIT_LENGTH .......................................................................................................... 417CHAR_LENGTH, CHARACTER_LENGTH ............................................................ 418HASH ...................................................................................................................... 418LEFT ....................................................................................................................... 419LOWER ................................................................................................................... 420LPAD ...................................................................................................................... 420OCTET_LENGTH ................................................................................................... 421OVERLAY ............................................................................................................... 422POSITION ............................................................................................................... 424REPLACE ............................................................................................................... 425REVERSE ............................................................................................................... 426RIGHT ..................................................................................................................... 427RPAD ...................................................................................................................... 427SUBSTRING ........................................................................................................... 428TRIM ....................................................................................................................... 430UPPER ................................................................................................................... 431

    Функции для работы с датой и временем ................................................................. 432DATEADD ............................................................................................................... 432DATEDIFF .............................................................................................................. 433EXTRACT ............................................................................................................... 435

    Функции преобразования типов .................................................................................. 436CAST ...................................................................................................................... 436

    Функции побитовых операций ..................................................................................... 440BIN_AND ................................................................................................................ 440BIN_OR .................................................................................................................. 441BIN_SHL ................................................................................................................. 441BIN_SHR ................................................................................................................ 442BIN_XOR ................................................................................................................ 442

  • Руководство по языку SQL СУБД Firebird 3.0

    15

    Функции для работы с UUID ....................................................................................... 442CHAR_TO_UUID .................................................................................................... 443GEN_UUID ............................................................................................................. 443UUID_TO_CHAR .................................................................................................... 444

    Функции для работы с генераторами (последовательностями) .............................. 444GEN_ID .................................................................................................................. 445

    Условные функции ....................................................................................................... 445COALESCE ............................................................................................................ 445DECODE ................................................................................................................ 446IIF ............................................................................................................................ 447MAXVALUE ............................................................................................................ 448MINVALUE ............................................................................................................. 449NULLIF ................................................................................................................... 450

    Агрегатные функции ............................................................................................................ 450AVG ................................................................................................................................ 450COUNT ........................................................................................................................... 451LIST ................................................................................................................................ 452MAX ................................................................................................................................ 453MIN ................................................................................................................................. 454SUM ................................................................................................................................ 455Статистические функции ............................................................................................. 456

    CORR ..................................................................................................................... 456COVAR_POP ......................................................................................................... 457COVAR_SAMP ....................................................................................................... 458STDDEV_POP ........................................................................................................ 459STDDEV_SAMP ..................................................................................................... 459VAR_POP ............................................................................................................... 460VAR_SAMP ............................................................................................................ 461

    Функции линейной регрессии ...................................................................................... 462REGR_AVGX ......................................................................................................... 462REGR_AVGY ......................................................................................................... 463REGR_COUNT ....................................................................................................... 464REGR_INTERCEPT ............................................................................................... 464REGR_R2 ............................................................................................................... 465REGR_SLOPE ....................................................................................................... 466REGR_SXX ............................................................................................................ 466REGR_SXY ............................................................................................................ 467REGR_SYY ............................................................................................................ 468

    Оконные (аналитические) функции .................................................................................... 468Агрегатные функции ..................................................................................................... 470Секционирование ......................................................................................................... 471Сортировка .................................................................................................................... 471Ранжирующие функции ................................................................................................ 472

    DENSE_RANK ....................................................................................................... 473RANK ...................................................................................................................... 474ROW_NUMBER ..................................................................................................... 474

    Навигационные функции ............................................................................................. 475FIRST_VALUE ..............................