842
Руководство по языку SQL СУБД Firebird 4.0 Firebird 4.0 Beta 2 16 января 2020 — v.0000-1 Спонсоры документации: Platinum Sponsor Gold Sponsor

Руководство по языку SQL СУБД Firebird 4 · 2020-01-17 · Руководство по языку SQL СУБД Firebird 4.0: Firebird 4.0 Beta 2 Над документом

  • Upload
    others

  • View
    11

  • Download
    1

Embed Size (px)

Citation preview

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

    Firebird 4.0 Beta 216 января 2020 — v.0000-1

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

    Gold Sponsor

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

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

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

  • СодержаниеВведение ......................................................................................................................................... 221. Структура языка ......................................................................................................................... 24

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

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

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

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

    Типы данных с плавающей точкой ....................................................................................... 34Приблизительные числовые типы ................................................................................ 34

    FLOAT ...................................................................................................................... 35FLOAT с указанием точности ........................................................................ 35

    REAL ........................................................................................................................ 36DOUBLE PRECISION .............................................................................................. 36LONG FLOAT ........................................................................................................... 36

    Десятичные типы с плавающей точкой ........................................................................ 36DECFLOAT ............................................................................................................... 36

    Режимы округления ........................................................................................ 37Семантика сравнения .................................................................................... 39Обработка ошибок .......................................................................................... 41Поддержка в клиентских приложениях ......................................................... 42Литералы констант DECFLOAT ..................................................................... 42

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

    Типы данных для работы с датой и временем ................................................................... 45Часовой пояс .................................................................................................................. 46

    Хранение ................................................................................................................. 47DATE ................................................................................................................................ 47TIME ................................................................................................................................. 47TIMESTAMP ..................................................................................................................... 48Литералы даты и времени ............................................................................................ 49Операции, использующие значения даты и времени ................................................. 51

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

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

    Индексирование символьных типов ............................................................................. 55

    3

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

    CHAR ............................................................................................................................... 56VARCHAR ........................................................................................................................ 56NCHAR ............................................................................................................................. 56Строковые литералы ..................................................................................................... 57

    Альтернативы для апострофов в строковых литералах ..................................... 57BOOLEAN ................................................................................................................................ 58Бинарные типы данных ......................................................................................................... 60

    BINARY ............................................................................................................................ 60VARBINARY ..................................................................................................................... 60BLOB ................................................................................................................................ 61

    Подтипы BLOB ........................................................................................................ 61Особенности BLOB ................................................................................................. 62

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

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

    Явное преобразование типов данных .......................................................................... 65Преобразование к домену ..................................................................................... 66Преобразование к типу столбца ........................................................................... 66Допустимые преобразования для функции CAST ............................................... 66Преобразование строк в дату и время ................................................................ 67

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

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

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

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

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

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

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

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

    CASE ........................................................................................................................ 82NULL в выражениях ....................................................................................................... 84

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

    Подзапросы ............................................................................................................................. 85Коррелированные подзапросы ...................................................................................... 85

    4

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

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

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

    BETWEEN ................................................................................................................ 87LIKE .......................................................................................................................... 88

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

    STARTING WITH ..................................................................................................... 90CONTAINING ........................................................................................................... 90SIMILAR TO ............................................................................................................. 91

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

    IS DISTINCT FROM ................................................................................................ 97IS .............................................................................................................................. 97

    Предикаты существования ............................................................................................ 98EXISTS ..................................................................................................................... 98IN .............................................................................................................................. 99SINGULAR ............................................................................................................. 102

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

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

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

    ALTER DATABASE ........................................................................................................ 111Добавление вторичного файла ........................................................................... 112Изменение пути и имени дельта файла ............................................................. 112Перевод базы данных в режим «безопасного копирования» ........................... 113Изменение набора символов по умолчанию ..................................................... 114Изменение привилегий выполнения по умолчанию .......................................... 114LINGER .................................................................................................................. 115Шифрование базы данных .................................................................................. 115Кто может выполнить ALTER DATABASE? ......................................................... 116

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

    SHADOW ............................................................................................................................... 117CREATE SHADOW ........................................................................................................ 117

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

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

    5

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

    DOMAIN ................................................................................................................................. 120CREATE DOMAIN ......................................................................................................... 120

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

    ALTER DOMAIN ............................................................................................................ 124Что не может изменить ALTER DOMAIN ............................................................ 127Кто может изменить домен? ............................................................................... 127Примеры ................................................................................................................ 128

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

    TABLE .................................................................................................................................... 129CREATE TABLE ............................................................................................................. 129

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

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

    Привилегии выполнения ...................................................................................... 140Кто может создать таблицу? ............................................................................... 140Примеры ................................................................................................................ 140Глобальные временные таблицы (GTT) ............................................................. 143

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

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

    ALTER TABLE ................................................................................................................ 148Счётчик форматов ................................................................................................ 152Предложение ADD ................................................................................................ 152Предложение DROP ............................................................................................. 153Предложение DROP CONSTRAINT .................................................................... 153Предложение DROP SQL SECURITY ................................................................. 154Предложение ALTER [COLUMN] ......................................................................... 154

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

    Предложение ALTER SQL SECURITY ................................................................ 158Кто может изменить таблицу? ............................................................................. 158

    6

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

    DROP TABLE ................................................................................................................. 158Кто может удалить таблицу? ............................................................................... 159

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

    INDEX ..................................................................................................................................... 160CREATE INDEX ............................................................................................................. 160

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

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

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

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

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

    VIEW ...................................................................................................................................... 166CREATE VIEW ............................................................................................................... 167

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

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

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

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

    RECREATE VIEW .......................................................................................................... 174Примеры: ............................................................................................................... 175

    TRIGGER ............................................................................................................................... 175CREATE TRIGGER ....................................................................................................... 176

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

    Форма объявления ....................................................................................... 179Состояние триггера ...................................................................................... 179Фаза ................................................................................................................ 179События ......................................................................................................... 179

    7

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

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

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

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

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

    CREATE OR ALTER TRIGGER .................................................................................... 192Примеры ................................................................................................................ 193

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

    RECREATE TRIGGER ................................................................................................... 194Примеры ................................................................................................................ 194

    PROCEDURE ......................................................................................................................... 195CREATE PROCEDURE ................................................................................................. 195

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

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

    Привилегии выполнения ...................................................................................... 199Тело хранимой процедуры .................................................................................. 199

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

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

    CREATE OR ALTER PROCEDURE .............................................................................. 202Примеры ................................................................................................................ 203

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

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

    8

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

    FUNCTION ............................................................................................................................. 205CREATE FUNCTION ..................................................................................................... 205

    Терминатор оператора ......................................................................................... 208Входные параметры ............................................................................................. 208Использование доменов при объявлении параметров ..................................... 208Использование типа столбца при объявлении параметров ............................. 209Возвращаемое значение ...................................................................................... 209Детерминированные функции ............................................................................. 209Привилегии выполнения ...................................................................................... 210Тело хранимой функции ...................................................................................... 210

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

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

    CREATE OR ALTER FUNCTION .................................................................................. 215Примеры ................................................................................................................ 216

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

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

    PACKAGE .............................................................................................................................. 217PACKAGE ....................................................................................................................... 218

    CREATE PACKAGE ............................................................................................... 218Привилегии выполнения .............................................................................. 220Терминатор оператора ................................................................................. 220Параметры процедур и функций ................................................................. 221Детерминированные функции ..................................................................... 221Кто может создать пакет? ............................................................................ 222Примеры ........................................................................................................ 222

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

    CREATE OR ALTER PACKAGE ............................................................................ 223Примеры ........................................................................................................ 224

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

    RECREATE PACKAGE .......................................................................................... 225Примеры ........................................................................................................ 226

    PACKAGE BODY ........................................................................................................... 226CREATE PACKAGE BODY ................................................................................... 226

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

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

    DROP PACKAGE BODY ....................................................................................... 233Кто может удалить тело пакета? ................................................................. 233

    9

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

    Примеры ........................................................................................................ 233RECREATE PACKAGE BODY .............................................................................. 233

    Примеры ........................................................................................................ 234EXTERNAL FUNCTION ......................................................................................................... 235

    DECLARE EXTERNAL FUNCTION .............................................................................. 235Кто может объявить внешнюю функцию? .......................................................... 237Примеры ................................................................................................................ 238

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

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

    FILTER ................................................................................................................................... 240DECLARE FILTER ......................................................................................................... 240

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

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

    SEQUENCE (GENERATOR) ................................................................................................. 243CREATE SEQUENCE .................................................................................................... 244

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

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

    CREATE OR ALTER SEQUENCE ................................................................................ 247Примеры ................................................................................................................ 247

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

    RECREATE SEQUENCE ............................................................................................... 248Примеры ................................................................................................................ 249

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

    EXCEPTION ........................................................................................................................... 250CREATE EXCEPTION ................................................................................................... 251

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

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

    CREATE OR ALTER EXCEPTION ................................................................................ 253Примеры ................................................................................................................ 253

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

    RECREATE EXCEPTION .............................................................................................. 254

    10

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

    Примеры ................................................................................................................ 255COLLATION ........................................................................................................................... 255

    CREATE COLLATION .................................................................................................... 256Специфичные атрибуты ....................................................................................... 257Кто может создать сортировку? .......................................................................... 258Примеры ................................................................................................................ 258

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

    CHARACTER SET ................................................................................................................. 260ALTER CHARACTER SET ............................................................................................ 260

    Примеры ................................................................................................................ 261COMMENTS ........................................................................................................................... 261

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

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

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

    Список полей SELECT ................................................................................................. 267FROM ............................................................................................................................. 271

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

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

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

    Естественные соединения (Natural Joins) .......................................................... 286Неявные соединения ........................................................................................... 287Смешивание явного и неявного соединения ..................................................... 288Перекрёстное соединение (CROSS JOIN) ......................................................... 288Неоднозначные имена полей в соединениях .................................................... 289Соединения с хранимыми процедурами ............................................................ 290

    WHERE .......................................................................................................................... 290GROUP BY .................................................................................................................... 293

    HAVING .................................................................................................................. 297WINDOW ........................................................................................................................ 298PLAN .............................................................................................................................. 300UNION ............................................................................................................................ 308ORDER BY .................................................................................................................... 310

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

    ROWS ............................................................................................................................ 313Особенности при использовании ROWS с одним аргументом ......................... 314Особенности при использовании ROWS с двумя аргументами ....................... 314Замена FIRST..SKIP .............................................................................................. 315

    11

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

    Совместное использование FIRST..SKIP и ROWS ............................................ 315Использование ROWS в UNION ......................................................................... 315Примеры ................................................................................................................ 315

    FETCH, OFFSET ........................................................................................................... 316FOR UPDATE [OF] ........................................................................................................ 317WITH LOCK ................................................................................................................... 318

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

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

    Рекурсивные CTE ................................................................................................. 324INSERT .................................................................................................................................. 326

    INSERT ... VALUES ....................................................................................................... 328Ключевое слово DEFAULT ................................................................................... 328

    INSERT ... SELECT ....................................................................................................... 329INSERT ... DEFAULT VALUES ...................................................................................... 329Директива OVERRIDING .............................................................................................. 330RETURNING .................................................................................................................. 330

    UPDATE ................................................................................................................................. 332SET ................................................................................................................................. 333

    Ключевое слово DEFAULT ................................................................................... 333WHERE .......................................................................................................................... 334PLAN .............................................................................................................................. 334ORDER BY и ROWS .................................................................................................... 335RETURNING .................................................................................................................. 335

    INTO ....................................................................................................................... 336UPDATE OR INSERT ............................................................................................................ 336

    Ключевое слово DEFAULT ........................................................................................... 338RETURNING .................................................................................................................. 338

    DELETE .................................................................................................................................. 339WHERE .......................................................................................................................... 339PLAN .............................................................................................................................. 340ORDER BY и ROWS .................................................................................................... 340RETURNING .................................................................................................................. 341

    MERGE .................................................................................................................................. 342EXECUTE PROCEDURE ...................................................................................................... 346

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

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

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

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

    Заголовок модуля ................................................................................................. 354Привилегии выполнения PSQL кода .................................................................. 354Секция деклараций .............................................................................................. 354Тело модуля .......................................................................................................... 354

    Хранимые процедуры .......................................................................................................... 356Преимущества хранимых процедур ........................................................................... 356

    12

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

    Типы хранимых процедур ............................................................................................ 356Создание хранимой процедуры .................................................................................. 357Изменение хранимой процедуры ................................................................................ 358Удаление хранимой процедуры .................................................................................. 359

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

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

    Преимущества пакетов ................................................................................................ 363Создание пакета ........................................................................................................... 364Модификация пакета ................................................................................................... 368Удаление пакета ........................................................................................................... 370

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

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

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

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

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

    Типы данных для переменных ............................................................................ 379DECLARE CURSOR ...................................................................................................... 380

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

    DECLARE PROCEDURE .............................................................................................. 382DECLARE FUNCTION ................................................................................................... 385BEGIN ... END ............................................................................................................... 387IF ... THEN ... ELSE ....................................................................................................... 388WHILE ... DO ................................................................................................................. 390BREAK ........................................................................................................................... 391LEAVE ............................................................................................................................ 391CONTINUE ..................................................................................................................... 393EXIT ................................................................................................................................ 394SUSPEND ...................................................................................................................... 395EXECUTE STATEMENT ................................................................................................ 396

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

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

    Пул внешних подключений (External connection pool) ............................... 400Особенности внешних подключений .......................................................... 402Особенности пула транзакций (Transaction pooling) .................................. 402

    13

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

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

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

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

    FOR EXECUTE STATEMENT ....................................................................................... 408OPEN ............................................................................................................................. 409FETCH ............................................................................................................................ 410CLOSE ........................................................................................................................... 414IN AUTONOMOUS TRANSACTION ............................................................................. 415POST_EVENT ................................................................................................................ 416Обработка ошибок ........................................................................................................ 417

    Системные исключения ....................................................................................... 417Пользовательские исключения ............................................................................ 417EXCEPTION ........................................................................................................... 418WHEN ... DO .......................................................................................................... 421

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

    Контекстные переменные .................................................................................................... 425CURRENT_CONNECTION ............................................................................................ 425CURRENT_DATE ........................................................................................................... 425CURRENT_ROLE .......................................................................................................... 426CURRENT_TIME ........................................................................................................... 427CURRENT_TIMESTAMP ............................................................................................... 427CURRENT_TRANSACTION .......................................................................................... 428CURRENT_USER .......................................................................................................... 429DELETING ...................................................................................................................... 429GDSCODE ..................................................................................................................... 430INSERTING .................................................................................................................... 431LOCALTIME ................................................................................................................... 431LOCALTIMESTAMP ....................................................................................................... 432NEW ............................................................................................................................... 433'NOW' ............................................................................................................................. 433OLD ................................................................................................................................ 435ROW_COUNT ................................................................................................................ 435SQLCODE ...................................................................................................................... 437SQLSTATE ..................................................................................................................... 437'TODAY' .......................................................................................................................... 438'TOMORROW' ................................................................................................................ 439UPDATING ..................................................................................................................... 440'YERSTERDAY' .............................................................................................................. 440USER .............................................................................................................................. 441

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

    RDB$GET_CONTEXT ............................................................................................ 441RDB$SET_CONTEXT ............................................................................................ 445

    Функции подсистемы безопасности ............................................................................ 447RDB$ROLE_IN_USE ............................................................................................. 447RDB$SYSTEM_PRIVILEGE .................................................................................. 448

    Функции для обработки ошибок ................................................................................. 448RDB$ERROR ......................................................................................................... 448

    14

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

    Функции работы с транзакциями ................................................................................ 449RDB$GET_TRANSACTION_CN ............................................................................ 449

    Математические функции ............................................................................................ 450ABS ......................................................................................................................... 450ACOS ...................................................................................................................... 451ACOSH ................................................................................................................... 451ASIN ....................................................................................................................... 452ASINH ..................................................................................................................... 452ATAN ....................................................................................................................... 452ATAN2 ..................................................................................................................... 453ATANH .................................................................................................................... 453CEIL, CEILING ....................................................................................................... 454COS ........................................................................................................................ 454COSH ..................................................................................................................... 455COT ........................................................................................................................ 455EXP ......................................................................................................................... 455FLOOR ................................................................................................................... 456LN ........................................................................................................................... 456LOG ........................................................................................................................ 457LOG10 .................................................................................................................... 457MOD ....................................................................................................................... 458PI ............................................................................................................................ 458POWER .................................................................................................................. 458RAND ...................................................................................................................... 459ROUND ................................................................................................................... 459SIGN ....................................................................................................................... 460SIN .......................................................................................................................... 461SINH ....................................................................................................................... 461SQRT ...................................................................................................................... 461TAN ......................................................................................................................... 462TANH ...................................................................................................................... 462TRUNC ................................................................................................................... 463

    Функции для работы со строками .............................................................................. 464ASCII_CHAR .......................................................................................................... 464ASCII_VAL .............................................................................................................. 464BIT_LENGTH .......................................................................................................... 465CHAR_LENGTH, CHARACTER_LENGTH ............................................................ 466LEFT ....................................................................................................................... 466LOWER ................................................................................................................... 467LPAD ....................................................................................................................... 468OCTET_LENGTH ................................................................................................... 469OVERLAY ............................................................................................................... 470POSITION ............................................................................................................... 471REPLACE ............................................................................................................... 472REVERSE ............................................................................................................... 473RIGHT ..................................................................................................................... 474RPAD ...................................................................................................................... 475SUBSTRING ........................................................................................................... 476TRIM ....................................................................................................................... 477UPPER .............................................................................................