719
Руководство по языку SQL СУБД Firebird 3.0 Firebird 3.0.4 8 августа 2018 — v.0051-1 Спонсоры документации: Platinum Sponsor Gold Sponsor

Руководство по языку SQL СУБД Firebird 3.0 - Firebird 3.0 · Триггеры на события базы данных ..... 341 DDL триггеры

  • Upload
    others

  • View
    31

  • Download
    0

Embed Size (px)

Citation preview

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

    Firebird 3.0.48 августа 2018 — v.0051-1

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

    Gold Sponsor

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

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

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

  • 3

    СодержаниеВведение ......................................................................................................................................... 201. Структура языка ......................................................................................................................... 22

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

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

    2. Типы данных .............................................................................................................................. 28Целочисленные типы данных ............................................................................................... 30

    SMALLINT ........................................................................................................................ 30INTEGER .......................................................................................................................... 30BIGINT .............................................................................................................................. 31Шестнадцатеричный формат для целых чисел .......................................................... 31

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

    Типы данных с фиксированной точкой ................................................................................ 32NUMERIC ......................................................................................................................... 33DECIMAL .......................................................................................................................... 34Точность арифметических операций ........................................................................... 34

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

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

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

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

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

    BLOB ................................................................................................................................ 44Подтипы BLOB ........................................................................................................ 45Особенности BLOB ................................................................................................. 45

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

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

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

    4

    Явное преобразование типов данных .......................................................................... 49Преобразование к домену ..................................................................................... 49Преобразование к типу столбца ........................................................................... 49Допустимые преобразования для функции CAST ............................................... 50Преобразование литералов дат и времени ......................................................... 50Сокращённое приведение типов даты и времени .............................................. 53

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

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

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

    Константы ........................................................................................................................ 60Строковые константы (литералы) ......................................................................... 60

    Строковые константы в шестнадцатеричной нотации ................................ 60Вводный синтаксис для строковых литералов ............................................ 61

    Числовые константы .............................................................................................. 61Шестнадцатеричная нотация чисел ............................................................. 62Диапазон значений шестнадцатеричных чисел .......................................... 62

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

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

    CASE ........................................................................................................................ 66NULL в выражениях ....................................................................................................... 67

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

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

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

    BETWEEN ................................................................................................................ 71LIKE .......................................................................................................................... 72

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

    STARTING WITH ..................................................................................................... 73CONTAINING ........................................................................................................... 74SIMILAR TO ............................................................................................................. 75

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

    IS DISTINCT FROM ................................................................................................ 80IS .............................................................................................................................. 81

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

    5

    Предикаты существования ............................................................................................ 82EXISTS ..................................................................................................................... 82IN .............................................................................................................................. 83SINGULAR ............................................................................................................... 85

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

    4. Операторы DDL ......................................................................................................................... 88DATABASE .............................................................................................................................. 88

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

    ALTER DATABASE ......................................................................................................... 94Добавление вторичного файла ............................................................................. 95Изменение пути и имени дельта файла .............................................................. 95Перевод базы данных в режим «безопасного копирования» ............................. 96Изменение набора символов по умолчанию ....................................................... 96LINGER .................................................................................................................... 96Шифрование базы данных .................................................................................... 97Кто может выполнить ALTER DATABASE? .......................................................... 97Примеры .................................................................................................................. 97

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

    SHADOW ................................................................................................................................. 99CREATE SHADOW ....................................................................................................... 100

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

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

    DOMAIN ................................................................................................................................. 102CREATE DOMAIN ......................................................................................................... 103

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

    ALTER DOMAIN ............................................................................................................ 107Что не может изменить ALTER DOMAIN ........................................................... 110Кто может изменить домен? ............................................................................... 110Примеры ................................................................................................................ 110

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

    TABLE .................................................................................................................................... 112CREATE TABLE ............................................................................................................ 112

    Символьные столбцы ........................................................................................... 115Ограничение NOT NULL ...................................................................................... 116Значение по умолчанию ...................................................................................... 116

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

    6

    Столбцы основанные на домене ........................................................................ 116Столбцы идентификации (автоинкремент) ........................................................ 116Вычисляемые поля ............................................................................................... 117Столбцы типа массив .......................................................................................... 117Ограничения .......................................................................................................... 117

    Имена для ограничений и их индексов ...................................................... 118Первичный ключ (PRIMARY KEY) ............................................................... 118Ограничение уникальности (UNIQUE) ........................................................ 118Внешний ключ (FOREIGN KEY) .................................................................. 119Ограничение CHECK .................................................................................... 121

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

    Ограничения GTT ......................................................................................... 124Примеры ........................................................................................................ 124

    Внешние таблицы ................................................................................................. 125Формат внешних файлов ............................................................................. 126Примеры использования внешних таблиц ................................................. 126

    ALTER TABLE ............................................................................................................... 127Счётчик форматов ................................................................................................ 131Предложение ADD ................................................................................................ 131Предложение DROP ............................................................................................. 132Предложение DROP CONSTRAINT .................................................................... 132Предложение ALTER [COLUMN] ......................................................................... 132

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

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

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

    RECREATE TABLE ....................................................................................................... 136Примеры ................................................................................................................ 137

    INDEX .................................................................................................................................... 137CREATE INDEX ............................................................................................................. 137

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

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

    ALTER INDEX ................................................................................................................ 140Использование ALTER INDEX для индексов ограничений ............................... 141Кто может выполнить ALTER INDEX? ................................................................ 141

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

    7

    Примеры ................................................................................................................ 141DROP INDEX ................................................................................................................. 142

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

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

    VIEW ...................................................................................................................................... 144CREATE VIEW .............................................................................................................. 144

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

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

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

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

    RECREATE VIEW ......................................................................................................... 151Примеры: ............................................................................................................... 152

    TRIGGER ............................................................................................................................... 152CREATE TRIGGER ....................................................................................................... 153

    Терминатор оператора ........................................................................................ 155DML триггеры (на таблицу или представление) ................................................ 155

    Форма объявления ....................................................................................... 155Состояние триггера ...................................................................................... 156Фаза ............................................................................................................... 156События ......................................................................................................... 156Порядок срабатывания ................................................................................ 156Тело триггера ................................................................................................ 156Внешние триггеры ........................................................................................ 156Кто может создать DML триггер? ............................................................... 157Примеры ........................................................................................................ 157

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

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

    ALTER TRIGGER .......................................................................................................... 166Допустимые изменения ........................................................................................ 167Кто может изменить триггеры? ........................................................................... 167

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

    8

    Примеры ................................................................................................................ 168CREATE OR ALTER TRIGGER .................................................................................... 168

    Примеры ................................................................................................................ 169DROP TRIGGER ........................................................................................................... 169

    Кто может удалить триггеры? ............................................................................. 170Примеры ................................................................................................................ 170

    RECREATE TRIGGER .................................................................................................. 170Примеры ................................................................................................................ 171

    PROCEDURE ........................................................................................................................ 171CREATE PROCEDURE ................................................................................................. 171

    Терминатор оператора ........................................................................................ 174Параметры ............................................................................................................ 174

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

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

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

    CREATE OR ALTER PROCEDURE ............................................................................. 179Примеры ................................................................................................................ 180

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

    RECREATE PROCEDURE ............................................................................................ 181Примеры ................................................................................................................ 182

    FUNCTION ............................................................................................................................. 182CREATE FUNCTION ..................................................................................................... 182

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

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

    CREATE OR ALTER FUNCTION ................................................................................. 191Примеры ................................................................................................................ 192

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

    RECREATE FUNCTION ................................................................................................ 193Примеры ................................................................................................................ 193

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

    9

    PACKAGE .............................................................................................................................. 194PACKAGE ...................................................................................................................... 194

    CREATE PACKAGE .............................................................................................. 194Терминатор оператора ................................................................................. 196Параметры процедур и функций ................................................................ 196Детерминированные функции ..................................................................... 197Кто может создать пакет? ........................................................................... 198Примеры ........................................................................................................ 198

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

    CREATE OR ALTER PACKAGE ........................................................................... 199Примеры ........................................................................................................ 200

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

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

    PACKAGE BODY ........................................................................................................... 202CREATE PACKAGE BODY ................................................................................... 202

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

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

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

    RECREATE PACKAGE BODY .............................................................................. 209Примеры ........................................................................................................ 210

    EXTERNAL FUNCTION ........................................................................................................ 210DECLARE EXTERNAL FUNCTION .............................................................................. 211

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

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

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

    FILTER ................................................................................................................................... 216DECLARE FILTER ......................................................................................................... 216

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

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

    SEQUENCE (GENERATOR) ................................................................................................. 219CREATE SEQUENCE ................................................................................................... 219

    Кто может создать последовательность? .......................................................... 220

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

    10

    Примеры ................................................................................................................ 220ALTER SEQUENCE ...................................................................................................... 221

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

    CREATE OR ALTER SEQUENCE ................................................................................ 222Примеры ................................................................................................................ 223

    DROP SEQUENCE ........................................................................................................ 223Кто может удалить генератор? ........................................................................... 224Примеры ................................................................................................................ 224

    RECREATE SEQUENCE .............................................................................................. 224Примеры ................................................................................................................ 225

    SET GENERATOR ........................................................................................................ 225Кто может изменить значение генератора? ...................................................... 225Примеры ................................................................................................................ 226

    EXCEPTION ........................................................................................................................... 226CREATE EXCEPTION ................................................................................................... 226

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

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

    CREATE OR ALTER EXCEPTION ............................................................................... 228Примеры ................................................................................................................ 229

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

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

    COLLATION ........................................................................................................................... 231CREATE COLLATION ................................................................................................... 231

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

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

    CHARACTER SET ................................................................................................................. 235ALTER CHARACTER SET ............................................................................................ 235

    Примеры ................................................................................................................ 236ROLE ...................................................................................................................................... 236

    CREATE ROLE .............................................................................................................. 237ALTER ROLE ................................................................................................................. 237DROP ROLE .................................................................................................................. 238

    COMMENTS .......................................................................................................................... 238COMMENT ON .............................................................................................................. 238

    Кто может добавить комментарий? .................................................................... 239Примеры ................................................................................................................ 240

    5. Операторы DML ....................................................................................................................... 241SELECT ................................................................................................................................. 241

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

    Список полей SELECT ................................................................................................. 244

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

    11

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

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

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

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

    WHERE .......................................................................................................................... 267GROUP BY .................................................................................................................... 270

    HAVING .................................................................................................................. 274PLAN .............................................................................................................................. 275UNION ............................................................................................................................ 283ORDER BY .................................................................................................................... 285

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

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

    FETCH, OFFSET ........................................................................................................... 291FOR UPDATE [OF] ........................................................................................................ 292WITH LOCK ................................................................................................................... 293

    Использование предложения FOR UPDATE ..................................................... 294Как сервер работает с WITH LOCK .................................................................... 295Предостережения при использовании WITH LOCK .......................................... 295

    INTO ............................................................................................................................... 296Общие табличные выражения CTE ("WITH ... AS ... SELECT") ................................ 297

    Рекурсивные CTE ................................................................................................. 299INSERT .................................................................................................................................. 302

    INSERT ... VALUES ....................................................................................................... 303INSERT ... SELECT ....................................................................................................... 303INSERT ... DEFAULT VALUES ..................................................................................... 304RETURNING .................................................................................................................. 304

    UPDATE ................................................................................................................................. 305SET ................................................................................................................................. 306WHERE .......................................................................................................................... 307PLAN .............................................................................................................................. 308ORDER BY и ROWS .................................................................................................... 308

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

    12

    RETURNING .................................................................................................................. 309INTO ....................................................................................................................... 309

    UPDATE OR INSERT ............................................................................................................ 310RETURNING .................................................................................................................. 311

    DELETE ................................................................................................................................. 311WHERE .......................................................................................................................... 312PLAN .............................................................................................................................. 313ORDER BY и ROWS .................................................................................................... 313RETURNING .................................................................................................................. 314

    MERGE .................................................................................................................................. 315EXECUTE PROCEDURE ...................................................................................................... 319

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

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

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

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

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

    Хранимые процедуры .......................................................................................................... 328Преимущества хранимых процедур ........................................................................... 328Типы хранимых процедур ............................................................................................ 328Создание хранимой процедуры .................................................................................. 329Изменение хранимой процедуры ............................................................................... 330Удаление хранимой процедуры .................................................................................. 330

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

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

    Преимущества пакетов ................................................................................................ 333Создание пакета ........................................................................................................... 334Модификация пакета ................................................................................................... 338Удаление пакета ........................................................................................................... 339

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

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

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

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

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

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

    13

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

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

    DECLARE PROCEDURE ...................................................................................... 351DECLARE FUNCTION ........................................................................................... 353

    BEGIN ... END ............................................................................................................... 354IF ... THEN ... ELSE ....................................................................................................... 356WHILE ... DO ................................................................................................................. 357LEAVE ............................................................................................................................ 358CONTINUE ..................................................................................................................... 360EXIT ................................................................................................................................ 361SUSPEND ...................................................................................................................... 362EXECUTE STATEMENT ............................................................................................... 363

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

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

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

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

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

    FOR EXECUTE STATEMENT ....................................................................................... 372OPEN ............................................................................................................................. 373FETCH ............................................................................................................................ 374CLOSE ........................................................................................................................... 379IN AUTONOMOUS TRANSACTION ............................................................................. 379POST_EVENT ................................................................................................................ 380Обработка ошибок ........................................................................................................ 381

    Системные исключения ....................................................................................... 381Пользовательские исключения ........................................................................... 382EXCEPTION ........................................................................................................... 382WHEN ... DO .......................................................................................................... 385

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

    Контекстные переменные .................................................................................................... 389CURRENT_CONNECTION ............................................................................................ 389CURRENT_DATE .......................................................................................................... 389CURRENT_ROLE .......................................................................................................... 390CURRENT_TIME ........................................................................................................... 390CURRENT_TIMESTAMP ............................................................................................... 391CURRENT_TRANSACTION .......................................................................................... 392CURRENT_USER .......................................................................................................... 393DELETING ...................................................................................................................... 393GDSCODE ..................................................................................................................... 394

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

    14

    INSERTING .................................................................................................................... 395LOCALTIME ................................................................................................................... 395LOCALTIMESTAMP ....................................................................................................... 396NEW ............................................................................................................................... 398'NOW' ............................................................................................................................. 398OLD ................................................................................................................................ 399ROW_COUNT ................................................................................................................ 400SQLCODE ...................................................................................................................... 401SQLSTATE ..................................................................................................................... 402'TODAY' .......................................................................................................................... 403'TOMORROW' ................................................................................................................ 403UPDATING ..................................................................................................................... 404'YERSTERDAY' .............................................................................................................. 405USER .............................................................................................................................. 405

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

    RDB$GET_CONTEXT ........................................................................................... 406RDB$SET_CONTEXT ............................................................................................ 409

    Математические функции ............................................................................................ 410ABS ......................................................................................................................... 410ACOS ...................................................................................................................... 411ACOSH ................................................................................................................... 411ASIN ....................................................................................................................... 412ASINH ..................................................................................................................... 412ATAN ...................................................................................................................... 412ATAN2 .................................................................................................................... 413ATANH .................................................................................................................... 414CEIL, CEILING ....................................................................................................... 414COS ........................................................................................................................ 414COSH ..................................................................................................................... 415COT ........................................................................................................................ 415EXP ......................................................................................................................... 416FLOOR ................................................................................................................... 416LN ........................................................................................................................... 416LOG ........................................................................................................................ 417LOG10 .................................................................................................................... 417MOD ....................................................................................................................... 418PI ............................................................................................................................ 418POWER .................................................................................................................. 419RAND ...................................................................................................................... 419ROUND ................................................................................................................... 419SIGN ....................................................................................................................... 420SIN .......................................................................................................................... 421SINH ....................................................................................................................... 421SQRT ...................................................................................................................... 422TAN ......................................................................................................................... 422TANH ...................................................................................................................... 422TRUNC ................................................................................................................... 423

    Функции для работы со строками .............................................................................. 424ASCII_CHAR .......................................................................................................... 424ASCII_VAL .............................................................................................................. 424BIT_LENGTH .......................................................................................................... 425

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

    15

    CHAR_LENGTH, CHARACTER_LENGTH ............................................................ 426HASH ...................................................................................................................... 426LEFT ....................................................................................................................... 427LOWER ................................................................................................................... 427LPAD ...................................................................................................................... 428OCTET_LENGTH ................................................................................................... 429OVERLAY ............................................................................................................... 430POSITION ............................................................................................................... 432REPLACE ............................................................................................................... 433REVERSE ............................................................................................................... 434RIGHT ..................................................................................................................... 435RPAD ...................................................................................................................... 435SUBSTRING ........................................................................................................... 436TRIM ....................................................................................................................... 438UPPER ................................................................................................................... 439

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

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

    Функции побитовых операций ..................................................................................... 448BIN_AND ................................................................................................................ 448BIN_NOT ................................................................................................................ 448BIN_OR .................................................................................................................. 449BIN_SHL ................................................................................................................. 449BIN_SHR ................................................................................................................ 450BIN_XOR ................................................................................................................ 450

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

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

    Условные функции ....................................................................................................... 453COALESCE ............................................................................................................ 453DECODE ................................................................................................................ 454IIF ............................................................................................................................ 456MAXVALUE ............................................................................................................ 456MINVALUE ............................................................................................................. 457NULLIF ................................................................................................................... 458

    Агрегатные функции ............................................................................................................ 458AVG ................................................................................................................................ 459COUNT ........................................................................................................................... 459LIST ................................................................................................................................ 460MAX ................................................................................................................................ 461MIN .........................................................................