35. Операторы SQL
В этом разделе описан синтаксис и краткое назначение операторов SQL. Операторы расположены в алфавитном порядке.
35.1. ALTER CHARACTER SET
С помощью оператора ALTER CHARACTER SET есть возможность изменять последовательность сортировки
по умолчанию для указанного набора символов:
Листинг 35.1 Синтаксис оператора ALTER CHARACTER SET
ALTER CHARACTER SET <набор символов>
SET DEFAULT COLLATION <сортировка>;
Это повлияет на использование набора символов в будущем, кроме случаев, когда явно переопределена
сортировка COLLATE. Сортировка существующих доменов, столбцов и переменных PSQL при этом не будет изменена.
Если сортировка по умолчанию была изменена для набора символов базы данных, что был указан при создании базы данных, то также изменяется и сортировка для базы данных.
Если сортировка по умолчанию была изменена для набора символов, который был указан при подключении, строковые константы будут интерпретироваться в соответствии с новыми параметрами сортировки (если набор символов и/или сортировка не переопределяются).
ALTER CHARACTER SET win1252
SET DEFAULT COLLATION win_ptbr;
35.2. ALTER DATABASE
Оператор ALTER DATABASE/SHEMA позволяет изменить структуры файлов базы данных, переключить её
в состояние «безопасное для копирования» или изменить некоторых свойств базы данных. Для выполнения
оператора необходимо предварительно соединиться с базой данных (оператор CONNECT). Синтаксис оператора:
Листинг 35.2 Синтаксис оператора ALTER DATABASE
ALTER {DATABASE | SCHEMA}
[ADD FILE <вторичный файл> [ADD FILE <вторичный файл> ...]]
[ADD DIFFERENCE FILE '<имя файла>' | DROP DIFFERENCE FILE]
[{BEGIN | END} BACKUP]
[SET DEFAULT CHARACTER SET <набор символов>]
[SET LINGER TO <секунды> | DROP LINGER]
[SET DEFAULT SQL SECURITY {DEFINER | INVOKER}]
[ENCRYPT WITH <плагин шифрования> [KEY <ключ шифрования>] | DECRYPT]
<вторичный файл> ::= FILE '<путь к файлу>'
[LENGTH [=] <целое> [PAGE[S]]]
[STARTING [AT [PAGE]] <целое>]
Изменять базу данных может ее владелец, администратор и пользователь с ролью ALTER DATABASE.
При использовании данного оператора можно:
добавить к базе данных вторичный файл (
ADD FILE);задать путь и имя дельта файла, в который будут записываться изменения, внесенные в базу данных после перевода ее в режим «безопасного копирования» (
ADD DIFFERENCE FILE);удалить ранее указанное описание файла дельты с помощью оператора
DROP DIFFERENCE FILE;переводить базу данных в режим «безопасного копирования» (
BEGIN BACKUP) и возвращать в режим нормального функционирования (END BACKUP);изменять набор символов по умолчанию для базы данных (
SET DEFAULT CHARACTER SET);установить задержку закрытия базы данных (
SET LINGER);изменять поведение по умолчанию, которое определяет в контексте какого пользователя будет выполняться объект базы данных (процедура, функция, пакет, триггер, таблица) (
SET DEFAULT SQL SECURITY);шифровать базу данных с помощью указанного плагина шифрования (
ENCRYPT WITH) или дешифровать (DECRYPT)
Подробно оператор описан в главе Базы данных (DATABASE).
См. также операторы CREATE DATABASE, DROP DATABASE, CREATE SHADOW, DROP SHADOW, CONNECT.
35.3. ALTER DOMAIN
Оператор ALTER DOMAIN используется для изменения характеристик существующего домена. Синтаксис оператора:
Листинг 35.3 Синтаксис оператора ALTER DOMAIN
ALTER DOMAIN <имя>
[TO <новое имя>]
[{ SET DEFAULT {<литерал> | NULL | <контекстная переменная>}
| DROP DEFAULT}]
[{ SET | DROP} NOT NULL]
[{ ADD [CONSTRAINT] CHECK (<условие домена>)
| DROP CONSTRAINT}]
[TYPE <тип данных> [CHARACTER SET <набор символов> [COLLATE <порядок сортировки>]
]];
Изменить существующий домен может владелец домена (его создатель), пользователь с административными
привилегиями или пользователь с привилегией ALTER ANY DOMAIN.
При использовании данного оператора можно:
изменить имя домена (конструкция
<имя> TO <новое имя>);установить новое значение по умолчанию (
SET DEFAULT),;удалить существующее значение по умолчанию (
DROP DEFAULT);задать новое условие домена (предложение
ADD [CONSTRAINT] CHECK (<условие домена>));установить или удалить ограничение
NOT NULLдля домена;удалить существующее условие домена (предложение
DROP CONSTRAINT);задать новый тип данных (
TYPE <тип данных>);изменить набор символов (
CHARACTER SET <набор символов>) и порядок сортировки (COLLATE <порядок сортировки>) для символьного домена.
Подробно оператор ALTER DOMAIN с примерами описан в главе 9.
См. также операторы CREATE DOMAIN, DROP DOMAIN.
35.4. ALTER EXCEPTION
Оператор позволяет изменить текст существующего в базе данных пользовательского исключения. Синтаксис:
Листинг 35.4 Синтаксис оператора ALTER EXCEPTION
ALTER EXCEPTION <имя исключения> '<текст сообщения>';
Текст сообщения может содержать до 1021 символа.
Изменять текст сообщения пользовательского исключения может администратор, владелец исключения
и пользователь с привилегией ALTER ANY EXCEPTION.
См. также операторы CREATE EXCEPTION, CREATE OR ALTER EXCEPTION, RECREATE EXCEPTION, DROP EXCEPTION, операторы PSQL WHEN-DO, EXCEPTION.
35.5. ALTER EXTERNAL CONNECTIONS POOL CLEAR ALL
Оператор позволяет закрыть все бездействующие соединения в пуле внешних соединений.
Листинг 35.5 Синтаксис оператора ALTER EXTERNAL CONNECTIONS POOL CLEAR ALL
ALTER EXTERNAL CONNECTIONS POOL CLEAR ALL
Все активные соединения будут отсоединены от пула (такие соединения будут немедленно закрыты, когда они не будут использоваться).
Подробнее о пуле внешних соединений см. в «Руководстве администратора».
35.6. ALTER EXTERNAL CONNECTIONS POOL CLEAR OLDEST
Оператор позволяет закрыть бездействующие соединения в пуле внешних соединений, у которых истекло время жизни.
Листинг 35.6 Синтаксис оператора ALTER EXTERNAL CONNECTIONS POOL CLEAR OLDEST
ALTER EXTERNAL CONNECTIONS POOL CLEAR OLDEST
Подробнее о пуле внешних соединений см. в «Руководстве администратора».
35.7. ALTER EXTERNAL CONNECTIONS POOL SET LIFETIME
Оператор позволяет устанавливать время жизни бездействующих соединений в пуле внешних соединений.
Листинг 35.7 Синтаксис оператора ALTER EXTERNAL CONNECTIONS POOL SET LIFETIME
ALTER EXTERNAL CONNECTIONS POOL SET LIFETIME <значение> {SECOND | MINUTE | HOUR}
Допустимые значения от 1 секунды до 24 часов. Значение по умолчанию определяется в firebird.conf
(параметр ExtConnPoolLifeTime в секундах).
Подробнее о пуле внешних соединений см. в «Руководстве администратора».
35.8. ALTER EXTERNAL CONNECTIONS POOL SET SIZE
Оператор позволяет устанавливать максимальное количество бездействующих соединений в пуле внешних соединений.
Листинг 35.8 Синтаксис оператора ALTER EXTERNAL CONNECTIONS POOL SET SIZE
ALTER EXTERNAL CONNECTIONS POOL SET SIZE <размер>
Допустимые значения от 0 до 1000. Нулевое значение обозначает что пул выключен. Значение по умолчанию
определяется в firebird.conf (параметр ExtConnPoolSize).
Подробнее о пуле внешних соединений см. в «Руководстве администратора».
35.9. ALTER EXTERNAL FUNCTION
Оператор позволяет изменить в функции, определенной пользователем (UDF— User Defined Function), имя точки входа и/или имя модуля. Его синтаксис:
Листинг 35.9 Синтаксис оператора ALTER EXTERNAL FUNCTION
ALTER EXTERNAL FUNCTION <имя UDF>
[ENTRY_POINT '<имя точки входа>']
[MODULE_NAME '<имя модуля>'];
Изменить внешнюю функцию может администратор, владелец функции (ее создатель) или пользователь
с привилегией ALTER ANY FUNCTION.
При использовании данного оператора можно:
указать новое имя точки входа для функции в модуле (
ENTRY_POINT);задать новое имя модуля, в котором находится описываемая функция (
MODULE_NAME).
Подробно оператор описан в 34.
См. также оператор DECLARE EXTERNAL FUNCTION, DROP EXTERNAL FUNCTION.
35.10. ALTER FUNCTION
Для изменения существующей хранимой функции используется оператор ALTER FUNCTION.
Синтаксис оператора:
Листинг 35.10 Синтаксис оператора изменения хранимой функции ALTER FUNCTION
ALTER FUNCTION <имя хранимой функции>
[(<входной параметр> [, <входной параметр> ...])]
RETURNS <тип> [COLLATE <сортировка>] [DETERMINISTIC]
[SQL SECURITY {DEFINER | INVOKER}]
{ EXTERNAL NAME '<внешний модуль>' ENGINE <имя движка> [AS <тело внешней функции>]}
|
{
{AS '<BLR код>'}
|
{AS
[<объявление> [<объявление> ...] ]
BEGIN
<блок операторов>
END }
}
<входной параметр> ::= <описание параметра> [{=|DEFAULT} <значение по умолчанию>]
<описание параметра> ::= <имя параметра> <тип> [NOT NULL]
[COLLATE <порядок сортировки>]
<тип> ::= <тип данных SQL>
| [TYPE OF] <имя домена>
| TYPE OF COLUMN <имя таблицы/представления>.<имя столбца>
<значение по умолчанию> ::= {<литерал> | NULL | <контекстная переменная>}
<внешний модуль> ::= '<имя внешнего модуля>!<имя функции в модуле>[! <информация>]'
<объявление> ::= <объявление локальной переменной>;
| <объявление курсора>;
| <объявление процедуры/функции>
| <реализация процедуры/функции>
Изменять хранимую функцию может администратор, владелец хранимой функции, пользователь с привилегией ALTER ANY FUNCTION.
Оператор ALTER FUNCTION позволяет изменять:
состав и характеристики входных параметров;
тип выходного значения;
в контексте какого пользователя будет выполняться функция;
локальные переменные, курсоры, подпрограммы;
тело хранимой функции на языке SQL;
исходный SQL код функции на двоичный BLR код;
точку входа и имя движка (для внешних функций);
а также указать, что функция является детерминированной.
После выполнения существующие привилегии и зависимости сохраняются.
Подробно оператор описан в главе 20.
См. также операторы CREATE OR ALTER FUNCTION, RECREATE FUNCTION, CREATE FUNCTION, DROP FUNCTION, DECLARE VARIABLE, DECLARE CURSOR, DECLARE FUNCTION, DECLARE PROCEDURE.
35.11. ALTER INDEX
Оператор ALTER INDEX позволяет сделать индекс активным или неактивным. Возможностей изменения
структуры или упорядоченности его столбцов этот оператор не предусматривает. Его синтаксис:
Листинг 35.11 Синтаксис оператора ALTER INDEX
ALTER INDEX <имя индекса>
{ { ACTIVE | INACTIVE }
| SET TABLESPACE [TO] {<имя табличного пространства> | PRIMARY}
}
Индекс может изменять только владелец таблицы, для которой создан индекс, администратор и пользователь с привилегией ALTER ANY TABLE.
Ключевое слово ACTIVE задает перевод неактивного индекса в активное
состояние. Ключевое слово INACTIVE указывает, что индекс переводится в
неактивное состояние. После перевода индекса из неактивного состояния в
активное система заново создает весь индекс.
Для индекса может быть указано табличное пространство для отдельного физического хранения.
Подробно оператор описан в главе 15.
См. также операторы CREATE INDEX, DROP INDEX, SET STATISTICS.
35.12. ALTER JOB
Оператор ALTER JOB позволяет изменять задания для планировщика.
Листинг 35.12 Синтаксис оператора ALTER JOB
ALTER JOB <имя_задания>
[<параметры расписания>]
[ACTIVE | INACTIVE]
[START DATE '<timestamp>' | NULL]
[END DATE '<timestamp>' | NULL]
[ AS
<объявления переменных>
BEGIN
<блок sql-операторов>
END
| COMMAND '<команда>' ]
<параметры расписания> ::= '<Минуты> <Часы> <Дни_месяца> <Месяцы> <Дни_недели>'
Изменить задание может его создатель и SYSDBA.
При использовании данного оператора можно изменить:
его активность (будет ли задание запускаться или нет);
расписание запуска;
интервал времени, в котором запускается задание, или убирать его;
команды ОС;
локальные переменные, курсоры, подпрограммы;
тело задания;
Подробнее о планировщике заданий можно узнать в главе 24.
См. также операторы CREATE JOB, DROP JOB.
35.13. ALTER MAPPING
Оператор ALTER MAPPING позволяет изменять любые опции существующего отображения.
Листинг 35.13 Синтаксис оператора ALTER MAPPING
ALTER [GLOBAL] MAPPING <имя отображения>
USING {
PLUGIN <имя плагина> [IN <имя базы данных>]
| ANY PLUGIN [IN <имя базы данных> | SERVERWIDE]
| MAPPING [IN <имя базы данных>]
| '*' [IN <имя базы данных>] }
FROM { ANY <тип отображаемого объекта> | <тип отображаемого объекта> <имя отображаемого объекта> }
TO { USER | ROLE } [<имя объекта, на которое произведено отображение>]
Изменить отображение может SYSDBA, владелец базы данных (если отображение локальное), пользователь с
ролью RDB$ADMIN или пользователь root (Linux).
При использовании данного оператора можно:
изменить источник отображения;
изменить отображаемый объект;
изменить пользователя или роль, на которого будет произведено отображение.
Подробнее синтаксис оператора разобран в главе 27.
См. также операторы CREATE OR ALTER MAPPING, DROP MAPPING, CREATE MAPPING.
35.14. ALTER PACKAGE
Оператор ALTER PACKAGE изменяет заголовок пакета. Синтаксис оператора:
Листинг 35.14 Синтаксис оператора изменения заголовка пакета ALTER PACKAGE
ALTER PACKAGE <имя пакета>
[SQL SECURITY {DEFINER | INVOKER}]
AS
BEGIN
[ <объявление процедуры> | <объявление функции> ...]
END
<объявление процедуры> ::=
PROCEDURE <имя процедуры> [(<входной параметр> [, <входной параметр> ...])]
[RETURNS (<выходной параметр> [, <выходной параметр> ...])]
<объявление функции> ::=
FUNCTION <имя функции> [(<входной параметр> [, <входной параметр> ...])]
RETURNS <тип> [COLLATE <сортировка>] [DETERMINISTIC]
<входной параметр> ::= <описание параметра> [{=|DEFAULT} <значение по умолчанию>]
<выходной параметр> ::= <описание параметра>
<описание параметра> ::= <имя параметра> <тип> [NOT NULL]
[COLLATE <порядок сортировки>]
<тип> ::= {
<тип данных SQL>
| [TYPE OF] <имя домена>
| TYPE OF COLUMN <имя таблицы/представления>.<имя столбца> }
<значение по умолчанию>::= {<литерал> | NULL | <контекстная переменная>}
Изменить заголовок пакета может администратор, владелец пакета или пользователь с привилегией ALTER ANY PACKAGE.
При использовании данного оператора позволяется изменять:
количество и состав процедур и функций;
входные и выходные параметры входящих в пакет процедур и функций;
в контексте какого пользователя будет выполняться пакет.
Состояние соответствия тела пакета его заголовку отображается в таблице RDB$PACKAGES в столбце RDB$VALID_BODY_FLAG.
Подробнее о пакетах описано в главе 22.
См. также операторы RECREATE PACKAGE, DROP PACKAGE, CREATE PACKAGE, CREATE OR ALTER PACKAGE, CREATE PROCEDURE, CREATE FUNCTION.
35.15. ALTER POLICY
Оператор ALTER POLICY используется для изменения политики безопасности.
Предупреждение
Политики безопасности применимы только для многофакторных пользователей при многофакторном подключении к БД.
ALTER POLICY <имя политики> AS <параметр>=<значение> [,<параметр>=<значение>...]
Чтобы изменить политику безопасности пользователь должен иметь права на запись в базу данных безопасности
security5.fdb и успешно соединиться с любой базой данных.
Возможные параметры политик можно посмотреть в описании оператора CREATE POLICY.
Подробнее о политиках безопасности см. в «Руководстве администратора».
См. также операторы CREATE POLICY, DROP POLICY.
35.16. ALTER PROCEDURE
Для изменения существующей хранимой процедуры используется оператор ALTER PROCEDURE. Синтаксис оператора:
Листинг 35.15 Синтаксис оператора ALTER PROCEDURE
ALTER PROCEDURE <имя хранимой процедуры>
[AUTHID {OWNER | CALLER}]
[(<входной пар-р>[,<входной пар-р>...])]
[RETURNS (<выходной параметр> [, <выходной параметр> ...])]
[SQL SECURITY {DEFINER | INVOKER}]
{ EXTERNAL NAME '<внешний модуль>' ENGINE <имя движка> [AS <тело внешней проц.>]} |
{
{AS '<BLR код>'}
|
{AS
[<объявление> [<объявление> ...] ]
BEGIN
<блок операторов>
END }
}
<входной параметр> ::= <описание параметра> [{=|DEFAULT} <значение по умолчанию>]
<выходной параметр> ::= <описание параметра>
<описание параметра> ::= <имя параметра> <тип> [NOT NULL] [COLLATE <порядок сортировки>]
<тип> ::= { <тип данных SQL>
| [TYPE OF] <имя домена>
| TYPE OF COLUMN <имя таблицы/представления>.<имя столбца> }
<значение по умолчанию>::= {<литерал> | NULL | <контекстная переменная>}
<внешний модуль> ::= '<имя внешнего модуля>!<имя функции в модуле>[! <информация>]'
<объявление> ::= <объявление локальной переменной>;
| <объявление курсора>;
| <объявление процедуры/функции>
| <реализация процедуры/функции>
Изменять хранимую процедуру может ее создатель и администратор (пользователь с ролью RDB$ADMIN) и
пользователь с привилегией ALTER ANY PROCEDURE.
Оператор ALTER PROCEDURE позволяет изменять:
состав и характеристики входных параметров;
состав и характеристики выходных параметров;
в контексте какого пользователя будет выполняться процедура;
локальные переменные, курсоры, подпрограммы;
тело хранимой процедуры на языке SQL;
исходный SQL код процедуры на двоичный BLR код;
точку входа и имя движка (для внешних процедур);
Выполняемые изменения хранимой процедуры не оказывают никакого влияния на ее зависимости.
Подробнее о хранимых процедурах можно прочитать в главе 19.
См. также операторы CREATE PROCEDURE, RECREATE PROCEDURE, DROP PROCEDURE, EXECUTE PROCEDURE, DECLARE VARIABLE, DECLARE CURSOR, DECLARE FUNCTION, DECLARE PROCEDURE.
35.17. ALTER ROLE
Оператор ALTER ROLE изменяет список системных привилегий роли или удаляет их. Оператор ALTER ROLE RDB$ADMIN
включает или отключает возможности администраторам Windows автоматически получать привилегии роли RDB$ADMIN при входе.
Листинг 35.16 Синтаксис оператора ALTER ROLE
ALTER ROLE
{
<имя роли> SET SYSTEM PRIVILEGES TO <сис.привилегия> [,<сис.привилегия>...]
| <имя роли> DROP SYSTEM PRIVILEGES
| RDB$ADMIN {SET | DROP} AUTO ADMIN MAPPING
}
Подробнее о работе с ролями см. в главе 27.
См. также операторы CREATE ROLE, DROP ROLE, GRANT, REVOKE.
35.18. ALTER SEQUENCE
Оператор устанавливает значение последовательности или генератора в заданное значение и/или изменяет значение приращения. Его синтаксис:
Листинг 35.17 Синтаксис оператора ALTER SEQUENCE
ALTER SEQUENCE <имя генератора>
[START WITH <значение>]
[RESTART [WITH <значение>]]
[INCREMENT [BY] <приращение>];
Изменить последовательность может ее владелец, администратор и пользователи с
привилегией ALTER ANY SEQUENCE (ALTER ANY GENERATOR).
Подробно оператор описан в главе 13.
См. также операторы CREATE GENERATOR, CREATE SEQUENCE, DROP GENERATOR, DROP SEQUENCE, SET GENERATOR, функцию GEN_ID, конструкцию NEXT VALUE FOR.
35.19. ALTER SESSION RESET
Оператор сбрасывает сеансовое окружение (подключения) к исходному состоянию. Эта функциональность полезна если сеанс используется повторно, вместо того чтобы производить отключение/подключение.
Листинг 35.18 Синтаксис оператора ALTER SESSION RESET
ALTER SESSION RESET
Данный оператор делает следующее:
сбрасывает установленные параметры
DECFLOAT (BIND, TRAPиROUND)в значения по умолчанию;сбрасывает тайм-ауты сессии и оператора в 0;
удаляет все контекстные переменные из пространства имён
USER_SESSION;очищает содержимое всех используемых глобальных таблиц уровня соединения (
COMMIT PRESERVE ROWS);сбрасывает роль в значение переданное в DPB (указанное при подключении) и очищает кэш привелегий (если роль была изменена с помощью оператора
SET ROLE);текущая активная транзакция откатывается и стартуется новая с теми же параметрами, после рестарта.
Предупреждение
Если в текущей активной транзакции были произведены изменения, то будет выдано предупреждение.
Предупреждение
Если в текущей сессии активны другие транзакции, то будет выдана ошибка. При проверке транзакций перед сбросом сессии подготовленные 2PC транзакции игнорируются.
35.20. ALTER TABLE
Оператор ALTER TABLE используется для изменения описания таблицы, существующей в базе данных.
Синтаксис оператора ALTER TABLE:
Листинг 35.19 Синтаксис оператора ALTER TABLE
ALTER TABLE <имя таблицы> <операция изменения> [, <операция изменения>...];
<операция изменения> ::= {
ADD <определение столбца>
| ADD <ограничение таблицы>
| DROP <имя столбца>
| DROP CONSTRAINT <ограничение столбца или таблицы>
| ALTER [COLUMN] <имя столбца> <модификация столбца>
| ALTER SQL SECURITY {DEFINER|INVOKER}
| DROP SQL SECURITY
| SET TABLESPACE [TO] {<имя табличного пространства> | PRIMARY}
}
<определение столбца> ::= <опр-е обычного столбца>
| <опр-е вычисляемого столбца>
| <опр-е идентификационного столбца>
<определение обычного столбца> ::=
<имя столбца> { <тип данных> | <имя домена>}
[DEFAULT {<литерал> | NULL | <контекстная переменная>}]
[NOT NULL]
[<ограничение столбца>]
[COLLATE <порядок сортировки>]
<определение вычисляемого столбца> ::=
<имя столбца> [<тип данных>]
{COMPUTED [BY] | GENERATED ALWAYS AS} (<выражение>)
<определение идентификационного столбца> ::=
<имя столбца> [<тип данных>]
{ALWAYS|GENERATED BY} DEFAULT AS IDENTITY [(START WITH <начальное значение>)]
[<ограничение столбца>]
<модификация столбца> ::= TO <новое имя столбца>
| POSITION <новая позиция>
| <мод-я обычного столбца>
| <мод-я вычисляемого столбца>
| <мод-я идентификационного столбца>
<модификация обычного столбца> ::=
TYPE { <тип данных> | <имя домена> }
| SET DEFAULT { <литерал> | NULL | <контекстная переменная>}
| DROP DEFAULT
| SET NOT NULL
| DROP NOT NULL
<модификация вычисляемого столбца> ::=
[TYPE <тип данных>] {GENERATED ALWAYS AS | COMPUTED [BY]} (<выражение>)
<модификация идентификационного столбца> ::=
<опции автоинкремента>
| SET GENERATED {ALWAYS|BY DEFAULT} [ <опции автоинкремента> ...]
| DROP IDENTITY
<опции автоинкремента> ::= RESTART [ WITH <стартовое значение> ]
| SET INCREMENT [BY] <приращение>
<ограничение столбца> ::=
[CONSTRAINT <имя ограничения>]
{ UNIQUE [<предложение USING>] [[IN] TABLESPACE {<имя табл. пространства>|PRIMARY}]
| PRIMARY KEY [<предложение USING>] [[IN] TABLESPACE {<имя табл. прос-ва>|PRIMARY}]
| REFERENCES <имя таблицы> [(<имя столбца>)]
[ON DELETE { NO ACTION | CASCADE | SET DEFAULT | SET NULL }]
[ON UPDATE { NO ACTION | CASCADE | SET DEFAULT | SET NULL }]
[<предложение USING>] [[IN] TABLESPACE { <имя табл. пространства> | PRIMARY}]
| CHECK (<условие столбца>)
}
<ограничение таблицы> ::=
[CONSTRAINT <имя ограничения>]
{ UNIQUE (<столбец> [, <столбец>...]) [<предложение USING>]
[[IN] TABLESPACE { <имя табличного пространства> | PRIMARY}]
| PRIMARY KEY (<столбец> [, <столбец>...]) [<предложение USING>]
[[IN] TABLESPACE { <имя табличного пространства> | PRIMARY}]
| FOREIGN KEY (<столбец> [, <столбец>...])
| REFERENCES <имя таблицы> [(<столбец> [, <столбец>...])]
[ON DELETE { NO ACTION | CASCADE | SET DEFAULT | SET NULL }]
[ON UPDATE { NO ACTION | CASCADE | SET DEFAULT | SET NULL }]
[<предложение USING>] [[IN] TABLESPACE { <имя табл. пространства> | PRIMARY}]
| CHECK (<условие столбца>)
}
<предложение USING> ::= USING [ASC[ENDING] | DESC[ENDING]] INDEX <имя индекса>
Изменять таблицу может ее владелец, администратор и пользователь с ролью ALTER ANY TABLE.
С помощью этого оператора можно:
добавлять новый столбец в таблицу;
удалять существующий столбец таблицы;
добавлять ограничение таблицы;
удалять существующее ограничение таблицы;
изменять или удалять привилегии выполнения для таблицы;
изменять имя и тип данных столбца;
изменять позицию столбца в списке столбцов таблицы;
добавлять или удалять значение по умолчанию столбца;
изменять тип и выражение для вычисляемого столбца;
изменять столбец идентификации;
изменять табличное пространство;
удалять табличное пространство.
Подробно оператор описан в главе 10.
См. также операторы CREATE TABLE, DROP TABLE.
35.21. ALTER TABLESPACE
Для изменения путей к файлам табличных пространств используется оператор ALTER TABLESPACE:
Листинг 35.20 Синтаксис оператора изменения табличного пространства ALTER TABLESPACE
ALTER TABLESPACE <имя табличного пространства> SET FILE [TO] <путь к файлу>;
Права на изменение табличных пространств есть только у администраторов и пользователей с привилегией ALTER ANY TABLESPACE.
Для изменения путей к файлам табличных пространств необходимо указать путь к файлу. Можно указывать как абсолютный путь, так
и относительный, в том числе с использованием псевдонима директории, заданного в directories.conf в секции tablespaces.
В directories.conf указывается реальный путь к директории с псевдонимом <псевдоним директории>. Путь к файлу
табличного пространства с использованием псевдонима директории указывается в формате: <псевдоним директории>/<файл>,
например, dir/file.dat. Первый компонент пути (dir) будет обработан как псевдоним директории. Если псевдоним
не будет найден в directories.conf, то путь будет обработан как относительный (относительно директории, в которой
размещен основной файл базы данных).
Все директории, используемые в пути, должны быть созданы заранее.
В системную таблицу RDB$TABLESPACES в любом случае будет записан абсолютный путь к файлу табличного пространства.
См. также операторы CREATE TABLESPACE, DROP TABLESPACE.
35.22. ALTER TRIGGER
Оператор ALTER TRIGGER позволяет изменять заголовок и/или тело существующего
триггера. Синтаксис оператора:
Листинг 35.21 Синтаксис оператора ALTER TRIGGER
ALTER TRIGGER <имя триггера>
[ACTIVE | INACTIVE]
[{BEFORE | AFTER} <список событий таблицы (представления)>]
[POSITION <порядок срабатывания триггера>]
[SQL SECURITY {DEFINER | INVOKER} | DROP SQL SECURITY]
[{EXTERNAL NAME '<внешний модуль>' ENGINE <имя движка> [AS <тело внеш. триг.>]} |
{
AS
[<объявление> [<объявление> ...] ]
BEGIN
<блок операторов>
END }]
<список событий таблицы (представления)> ::= <событие DML> [OR <событие DML>...]
<событие DML> ::= { INSERT | UPDATE | DELETE }
DML триггер может быть изменен администратором и владельцем таблицы или представления или пользователем
с привилегией ALTER ANY {TABLE | VIEW\. Триггеры для событий базы данных и триггеры событий на изменение
метаданных может изменить администратор, владелец базы данных или пользователь с привилегией ALTER DATABASE.
В триггере с помощью данного оператора можно изменить:
его состояние активности (
ACTIVE / INACTIVE);событие (события) таблицы (представления) и фазу события;
позицию триггера;
выполняемые триггером действия (тело триггера);
в контексте какого пользователя будет выполняться триггер (или удалить эту опцию);
Если какой-то элемент не указан, то его первоначальное значение не изменяется.
В этом операторе нельзя изменить ссылку на таблицу или представление, с которым связан существующий триггер, а также событие базы данных.
См. также операторы CREATE TRIGGER, RECREATE TRIGGER, CREATE OR ALTER TRIGGER, DROP TRIGGER, DECLARE VARIABLE.
35.23. ALTER USER
Для изменения существующей учетной записи пользователя используется следующий синтаксис:
Листинг 35.22 Синтаксис оператора ALTER USER
ALTER {USER <логин> | CURRENT USER}
{
[SET]
[PASSWORD '<пароль>']
[FIRSTNAME '<имя пользователя>']
[MIDDLENAME '<отчество пользователя>']
[LASTNAME '<фамилия пользователя>']
[ACTIVE | INACTIVE]
[TAGS (<атрибут>|DROP <имя атрибута> [, <атрибут>|DROP <имя атрибута>...] )]
}
[USING PLUGIN 'имя плагина']
[{GRANT | REVOKE} ADMIN ROLE];
<атрибут> ::= <имя атрибута> = 'строковое значение'
В операторе ALTER USER должно присутствовать хотя бы одно из необязательных предложений.
Это единственный оператор управления учётными записями, который может также использоваться
непривилегированными пользователями для изменения их собственных учетных записей, однако это не
относится к опциям GRANT/REVOKE ADMIN ROLE и атрибуту ACTIVE/INACTIVE для изменения которых,
необходимы административные привилегии.
Возможность модификации учетных записей пользователей предоставлена:
SYSDBA;Любому пользователю, имеющему права на роль
RDB$ADMINв базе данных пользователей и права на ту же роль для базы данных в активном подключении (пользователь должен подключаться к базе данных с рольюRDB$ADMIN);При включенном флаге
AUTO ADMIN MAPPINGв базе данных пользователей - любой администратор операционной системы Windows (при условии использования сервером доверенной авторизации) без указания роли. При этом не важно, включен или выключен флагAUTO ADMIN MAPPINGв самой базе данных.
Если требуется изменить свою учётную запись, то вместо указания имени текущего
пользователя можно использовать предложение CURRENT USER.
С помощью данного оператора можно:
поменять пароль пользователя;
изменить дополнительные атрибуты пользователя, такие как имя пользователя (имя человека), отчество и фамилия;
сделать учетную запись неактивной (или наоборот активировать);
задать, изменить или удалить пользовательские атрибуты
предоставить указанному пользователю привилегии роли
RDB$ADMINв базе данных безопасности.
Примечание
Если предложение USING PLUGIN не указано, то при изменении атрибутов пользователя они сами меняется
у всех соответствующих пользователей в плагинах из списка параметра DefaultUserManagers.
Если в каком-либо стандартном плагине нет пользователя, то он добавляется, но только есть среди изменяемых атрибутов есть пароль.
Подробнее о работе с пользователями см. в «Руководстве администратора».
См. также операторы CREATE USER, DROP USER.
35.24. ALTER VIEW
Оператор ALTER VIEW позволяет изменять определение представления без его пересоздания, при этом
существующие права на представления и зависимости сохраняются.
Листинг 35.23 Синтаксис оператора ALTER VIEW
ALTER VIEW <имя представления> [<список столбцов>]
AS <оператор SELECT>
[WITH CHECK OPTION]
<список столбцов> ::= (столбец [, столбец ...]);
Изменить представление могут только владелец представления, администратор, пользователь с привилегией ALTER ANY VIEW.
Подробнее об этом операторе см. в главе 16.
См. также операторы CREATE OR ALTER VIEW, CREATE VIEW, DROP VIEW, RECREATE VIEW.
35.25. CALL
Оператор CALL аналогичен EXECUTE PROCEDURE,
но позволяет получать определенные выходные параметры или не получать их вовсе.
Если используется позиционная или смешанная передача, то сначала нужно указать входные параметры, а потом выходные.
Выходные параметры игнорируются, если в них передано значение NULL. В DSQL в этом случае они даже не возвращаются.
Синтаксис оператора CALL:
CALL [<имя пакета> .] <имя процедуры> (<параметры>)
<параметры> ::=
<позиционные параметры> |
[ {<позиционные параметры>,} ] <именованные параметры>
<позиционные параметры> ::=
{<значение> | DEFAULT} [ {, <значение> | DEFAULT}... ]
<именованные параметры> ::=
<именованные параметры> [ {, <именованные параметры>}... ]
<именованные параметры> ::=
<значение>
| DEFAULT
Примеры:
Создание процедуры:
create or alter procedure insert_customer (
last_name varchar(30),
first_name varchar(30)
) returns (
id integer,
full_name varchar(62)
)
as
begin
insert into customers (last_name, first_name)
values (:last_name, :first_name)
returning id, last_name || ', ' || first_name
into :id, :full_name;
end
Не все выходные параметры являются обязательными:
call insert_customer(
'LECLERC',
'CHARLES',
?)
Игнорирование первого выходного параметра с помощью
NULL:
call insert_customer(
'LECLERC',
'CHARLES',
null,
?)
Игнорировать выходной параметр
ID:
call insert_customer(
'LECLERC',
'CHARLES',
full_name => ?)
Передача входных данных и получение выходных с помощью именованных аргументов:
call insert_customer(
last_name => 'LECLERC',
first_name => 'CHARLES',
last_name => ?,
id => ?)
См. также операторы CREATE PROCEDURE, ALTER PROCEDURE, DROP PROCEDURE, SELECT.
35.26. COMMENT
Оператор COMMENT позволяет создавать примечания, комментарии для объектов базы данных.
Листинг 35.24 Синтаксис оператора COMMENT
COMMENT ON <объект> IS {'<текст>' | NULL}
<объект> ::= DATABASE
| <базовый тип> <имя>
| COLUMN <таблица>.<столбец>
| [PROCEDURE | FUNCTION] PARAMETER [<пакет>.]<процедура>.<параметр>
| {PROCEDURE | [EXTERNAL] FUNCTION} [<пакет>.]<процедура>
<базовый тип> ::= CHARACTER SET
| COLLATION
| DOMAIN
| EXCEPTION
| FILTER
| GENERATOR
| INDEX
| PACKAGE
| USER
| ROLE
| SEQUENCE
| TABLE
| TRIGGER
| VIEW
Если текст примечания задать в виде двух подряд идущих апострофов '', то это равносильно заданию NULL,
то есть удалению существующего примечания.
Добавить комментарий может администратор, владелец объекта, для которого добавляется комментарий,
пользователь с привилегией ALTER ANY <тип объекта>.
35.27. COMMIT
Оператор подтверждает все изменения базы данных, выполненные в контексте текущей транзакции.
Листинг 35.25 Синтаксис оператора COMMIT
COMMIT [WORK] [TRANSACTION <имя транзакции>]
[RELEASE] [RETAIN [SNAPSHOT]];
При выполнении оператора подтверждаются все изменения в данных, выполненные в контексте данной транзакции. Новые версии записей (измененных, добавленных, удаленных) становятся доступными для других процессов.
Подробно оператор описан в главе 6.
См. также операторы SET TRANSACTION, ROLLBACK, SAVEPOINT, RELEASE SAVEPOINT.
35.28. CONNECT
Оператор CONNECT используется для соединения с существующей базой данных.
Синтаксис:
Листинг 35.26 Синтаксис оператора CONNECT
CONNECT '<спецификация файла>'
[USER '<имя пользователя>' [PASSWORD '<пароль>']]
[CACHE <целое> [BUFFERS]]
[ROLE '<имя роли>'];
Соединиться с базой данных может любой пользователь, описанный в системе.
Подробно оператор описан в главе 7.
См. также операторы CREATE ROLE, DROP ROLE, GRANT, REVOKE.
35.29. CREATE COLLATION
Оператор задает новый порядок сортировки для существующего в базе данных набора символов.
Листинг 35.27 Синтаксис оператора CREATE COLLATION
CREATE COLLATION <имя сортировки>
FOR <имя набора символов>
[FROM <базовая сортировка> | FROM EXTERNAL ('<имя внешнего файла>')]
[NO PAD | PAD SPACE]
[CASE SENSITIVE | CASE INSENSITIVE]
[ACCENT SENSITIVE | ACCENT INSENSITIVE]
['<атрибут> [; <атрибут> ...]'];
<атрибут> ::= <имя атрибута> = <значение атрибута>
Оператор CREATE COLLATION ничего не создаёт, а делает сортировку известной для базы данных.
Сортировка уже должна присутствовать в системе, как правило в файле библиотеки, и должна быть
зарегистрирована в файле fbintl.conf подкаталога intl корневой директории РЕД Базы Данных.
В этом операторе можно указать:
сортировку, на основе которой будет создана новая сортировка;
учитываются или нет конечные пробелы при сравнении;
будет ли сравнение чувствительно к регистру;
будет ли сравнение чувствительно к акцентированным буквам (например «е» и «ё»);
атрибуты для сортировки.
Создать новую сортировку может администратор и пользователь с привилегией CREATE COLLATION.
Пользователь, создавший сортировку, становится её владельцем.
Подробно оператор описан в главе 23.
См. также оператор DROP COLLATION.
35.30. CREATE DATABASE
Оператор CREATE DATABASE/SCHEMA создает новую базу данных. При этом в файл базы
данных помещаются многочисленные системные данные. Синтаксис оператора:
Листинг 35.28 Синтаксис оператора CREATE DATABASE
CREATE {DATABASE | SCHEMA} '<спецификация файла>'
[USER '<имя пользователя>' [PASSWORD '<пароль>'] [ROLE <имя роли>]]
[PAGE_SIZE [=] <целое>]
[LENGTH [=] <целое> [PAGE[S]]]
[SET NAMES '<набор символов>']
[DEFAULT CHARACTER SET <набор символов>
[COLLATION <сортировка по умолчанию>]]
[DIFFERENCE FILE '<имя файла>']
[<вторичный файл> [<вторичный файл>...]]
<спецификация файла> ::=
[<спецификация удалённого сервера>] { <путь к файлу БД> | <алиас БД> }
<спецификация удалённого сервера> ::=
<хост>[\<порт> | <имя сервиса>]:
| \\<хост>[@<порт> | <имя сервиса>]\
| <протокол>://[ <имя сервиса>[: <порт> | <имя сервиса>]/]
<протокол> = inet | inet4 | inet6 | xnet
<вторичный файл> ::= FILE '<путь к файлу>'
[LENGTH [=] <целое> [PAGE[S]]]
[STARTING [AT [PAGE]] <целое>]
Создать новую базу данных может только администратор и пользователь с привилегией CREATE DATABASE.
В этом операторе можно указать:
имя и пароль владельца базы данных;
размер страницы базы данных;
количество страниц в первичном файле базы данных;
набор символов подключения;
набор символов по умолчанию для строковых типов данных в базе данных;
дельта-файл, который будет создаваться при выполнении команды
ALTER DATABASE BEGIN BACKUPили запуске утилитыnBackupиз командной строки;спецификацию и размер вторичных файлов;
Подробно оператор описан в главе 7.
См. также операторы ALTER DATABASE, DROP DATABASE, CREATE SHADOW, DROP SHADOW, CONNECT.
35.31. CREATE DOMAIN
Оператор CREATE DOMAIN создает новый домен в базе данных, с которой в настоящий
момент существует соединение. Синтаксис оператора:
Листинг 35.29 Синтаксис оператора CREATE DOMAIN
CREATE DOMAIN <имя домена> [AS] <тип данных>
[DEFAULT {<литерал> | NULL | <контекстная переменная>}]
[NOT NULL]
[CHECK (<условие домена>)]
[CHARACTER SET <набор символов> [COLLATE <порядок сортировки>] ];
Создавать домен может администратор и пользователь с привилегией CREATE DOMAIN.
В этом операторе можно указать:
имя создаваемого домена;
тип данных;
значение по умолчанию;
можно ли столбцу, основанному на этом домене, присваиваться пустое значение;
условие, которому должно удовлетворять значение;
набор символов и порядок сортировки при описании символьного домена.
Подробно оператор CREATE DOMAIN описан в главе 9.
См. также операторы ALTER DOMAIN, DROP DOMAIN.
35.32. CREATE EXCEPTION
Оператор создает пользовательское исключение. Синтаксис оператора:
Листинг 35.30 Синтаксис оператора CREATE EXCEPTION
CREATE EXCEPTION <имя исключения> '<текст сообщения>';
Имя исключения может содержать до 63 символов и должно быть уникальным среди всех имен пользовательских исключений базы данных.
Текст сообщения — это текст, выдаваемый пользователю при вызове данного исключения. Может содержать до 1021
любых символов, включая буквы кириллицы и специальные символы. Сообщение об ошибке может содержать слоты для
параметров (@N), которые заполняются при возбуждении исключения. Нумерация слотов начинается с 1.
Максимальный номер слота равен 9.
Создать исключение может администратор и пользователь с привилегией CREATE EXCEPTION.
Пользователь, создавший исключение, становится его владельцем.
Подробнее оператор описан в главе 17.
См. также операторы ALTER EXCEPTION, DROP EXCEPTION, RECREATE EXCEPTION, CREATE OR ALTER EXCEPTION, операторы PSQL WHEN-DO, EXCEPTION.
35.33. CREATE FUNCTION
Для создания хранимой функции используется оператор CREATE FUNCTION.
Листинг 35.31 Синтаксис оператора создания хранимой функции CREATE FUNCTION
CREATE FUNCTION <имя хранимой функции>
[(<входной параметр> [, <входной параметр> ...])]
RETURNS <тип> [COLLATE <сортировка>] [DETERMINISTIC]
[SQL SECURITY {DEFINER | INVOKER}]
{EXTERNAL NAME '<внешний модуль>' ENGINE <имя движка> [AS <тело внешней функции>]}|
{
{AS '<BLR код>'}
|
{AS
[<объявление> [<объявление> ...] ]
BEGIN
<блок операторов>
END }
}
<входной параметр> ::= <описание параметра> [{=|DEFAULT} <значение по умолчанию>]
<описание параметра> ::= <имя параметра> <тип> [NOT NULL]
[COLLATE <порядок сортировки>]
<тип> ::= <тип данных SQL>
| [TYPE OF] <имя домена>
| TYPE OF COLUMN <имя таблицы/представления>.<имя столбца>
<значение по умолчанию> ::= {<литерал> | NULL | <контекстная переменная>}
<внешний модуль> ::= '<имя внешнего модуля>!<имя функции в модуле>[! <информация>]'
<объявление> ::= <объявление локальной переменной>;
| <объявление курсора>;
| <объявление процедуры/функции>
| <реализация процедуры/функции>
Хранимую функцию может создать администратор и пользователь с привилегией CREATE FUNCTION.
Пользователь, создавший хранимую функцию, становится её владельцем.
В этом операторе можно указать:
имя хранимой функции (должно быть уникальным среди имён всех хранимых функций и внешних (UDF) функций);
входные параметры от вызвавшей программы;
тип возвращаемого значения хранимой функции;
что функция детерминированная;
место расположения функции во внешнем модуле (внешняя функция);
в контексте какого пользователя будет выполняться функция;
произвольное количество локальных переменных, именованных курсоров и подпрограммы (подпроцедуры и подфункции);
блок операторов в теле хранимой функции;
двоичный BLR код вместо исходного SQL текста.
Подробнее оператор описан в главе 20.
См. также операторы CREATE OR ALTER FUNCTION, RECREATE FUNCTION, ALTER FUNCTION, DROP FUNCTION, DECLARE VARIABLE, DECLARE CURSOR, DECLARE FUNCTION, DECLARE PROCEDURE.
35.34. CREATE GENERATOR
Оператор CREATE GENERATOR используется для создания в базе данных объекта
генератор (GENERATOR или SEQUENCE). Синтаксис оператора:
Листинг 35.32 Синтаксис оператора CREATE GENERATOR
CREATE {GENERATOR | SEQUENCE} <имя генератора>
[START WITH <начальное значение>] [INCREMENT [BY] <приращение>];
Ключевые слова GENERATOR и SEQUENCE являются синонимами.
В этом операторе можно указать:
имя генератора (должно быть уникальным среди имён всех генератора и должно содержать до 63 символов);
начальное значение последовательности;
шаг приращения для оператора
NEXT VALUES FORи функцииGEN_ID.
Создавать последовательности могут администраторы и те пользователи, у кого есть привилегия
CREATE SEQUENCE (CREATE GENERATOR). Пользователь, создавший последовательность, становится её владельцем.
Подробно работа с генераторами описана в главе 13.
См. также операторы DROP GENERATOR, DROP SEQUENCE, CREATE SEQUENCE, SET GENERATOR, ALTER SEQUENCE, функцию GEN_ID, конструкцию NEXT VALUE FOR.
35.35. CREATE GLOBAL TEMPORARY TABLE
Временные таблицы (GTT) используются в СУБД «РЕД База Данных» для хранения данных, которые относятся к одной сессии или одной транзакции. Временные таблицы (GLOBAL TEMPORARY) в отличие от постоянных таблиц целесообразно использовать в тех случаях, когда сохраняемые данные часто изменяются, и непостоянны, и предназначены только для хранения временных для некоторой сессии данных.
Листинг 35.33 Синтаксис оператора создания глобальной временной таблицы
CREATE GLOBAL TEMPORARY TABLE <имя таблицы>
(<определение столбца> [, {<определение столбца> | <ограничение таблицы>}...]);
[ON COMMIT {DELETE | PRESERVE} ROWS]
[SQL SECURITY {DEFINER | INVOKER}];
Если в операторе создания глобальной временной таблицы указано необязательное предложение
ON COMMIT DELETE ROWS, то будет создана GTT транзакционного уровня (по умолчанию).
При указании предложения ON COMMIT PRESERVE ROWS будет создана GTT уровня соединения с базой данных.
Более подробное описание GTT можно найти в главе 10.
См. также операторы CREATE TABLE, ALTER TABLE, DROP TABLE.
35.36. CREATE INDEX
Оператор позволяет создать индекс для таблицы базы данных. Его синтаксис:
Листинг 35.34 Синтаксис оператора CREATE INDEX
CREATE [UNIQUE] [ASC[ENDING] | DESC[ENDING]]
INDEX <имя индекса> ON <таблица>
{(<столбец> [, <столбец> ...]) | COMPUTED BY (<выражение>)}
[WHERE <условие>]
[[IN] TABLESPACE {<имя табличного пространства> | PRIMARY}];
Индекс создается для одной конкретной таблицы.
Создать индекс может только владелец таблицы, для которой создан индекс, администратор и
пользователь с привилегией ALTER ANY TABLE.
В этом операторе можно указать:
имя индекса (должно быть уникальным среди имен всех индексов базы данных);
уникален ли индекс;
записи индекса упорядочиваются по возрастанию или убыванию значений столбцов;
выражение в вычисляемом индексе;
условие для создания частичного индекса только по подходящим записям таблицы;
табличное пространство индекса.
Подробно оператор описан в главе 15.
См. также операторы ALTER INDEX, DROP INDEX, SET STATISTICS.
35.37. CREATE JOB
Оператор CREATE JOB позволяет создавать задания для планировщика.
Листинг 35.35 Синтаксис оператора CREATE JOB
CREATE JOB <имя_задания>
<параметры расписания>
[ACTIVE | INACTIVE]
[START DATE '<timestamp>' | NULL]
[END DATE '<timestamp>' | NULL]
{AS
<объявления переменных>
BEGIN
<блок sql-операторов>
END
| COMMAND '<команда>' }
<параметры расписания> ::= '<Минуты> <Часы> <Дни_месяца> <Месяцы> <Дни_недели>'
Задание выполняется от имени пользователя, который его создал.
Создать задание может пользователь с административными привилегиями или с привилегией CREATE JOB.
При использовании данного оператора можно указать:
имя задания;
его активность (будет ли задание запускаться или нет);
расписание запуска;
интервал времени, в котором запускается задание;
команды ОС;
локальные переменные, курсоры, подпрограммы;
тело задания;
Подробно о планировщике заданий описано в главе 24.
35.38. CREATE MAPPING
Оператор CREATE MAPPING создаёт отображение объектов безопасности (пользователей, групп, ролей)
одного или нескольких плагинов аутентификации на внутренние объекты безопасности – CURRENT_USER и CURRENT_ROLE.
Листинг 35.36 Синтаксис оператора CREATE MAPPING
CREATE [GLOBAL] MAPPING <имя отображения>
USING {
PLUGIN <имя плагина> [IN <имя базы данных>]
| ANY PLUGIN [IN <имя базы данных> | SERVERWIDE]
| MAPPING [IN <имя базы данных>]
| '*' [IN <имя базы данных>] }
FROM { ANY <тип отображаемого объекта> | <тип отображаемого объекта> <имя отображаемого объекта> }
TO { USER | ROLE } [<имя объекта, на которое произведено отображение>]
Воспользоваться оператором создания отображений может SYSDBA, владелец базы данных (если отображение локальное),
пользователь с ролью RDB$ADMIN, пользователь root (Linux).
При использовании данного оператора можно указать:
что отображение будет применено не только для текущей базы данных, но и для всех баз данных находящимся в том же кластере (
GLOBAL);имя отображения;
источник отображения;
отображаемый объект;
пользователя или роль, на которого будет произведено отображение.
Подробнее синтаксис оператора разобран в главе 27.
См. также операторы CREATE OR ALTER MAPPING, DROP MAPPING, ALTER MAPPING.
35.39. CREATE OR ALTER EXCEPTION
Оператор создает новое пользовательское исключение, если оно отсутствует в базе данных, или изменяет существующее, при этом существующие зависимости исключения будут сохранены. Синтаксис оператора:
Листинг 35.37 Синтаксис оператора CREATE OR ALTER EXCEPTION
CREATE OR ALTER EXCEPTION <имя исключения> '<текст сообщения>';
Имя исключения может содержать до 63 символов и должно быть уникальным среди всех имен исключений базы данных.
Текст сообщения — текст, выдаваемый в момент вызова исключения. Может содержать до 1021 символа.
Подробнее об исключениях см. в главе 17.
См. также операторы ALTER EXCEPTION, DROP EXCEPTION, CREATE EXCEPTION, RECREATE EXCEPTION, операторы PSQL WHEN-DO, EXCEPTION.
35.40. CREATE OR ALTER FUNCTION
Оператор CREATE OR ALTER FUNCTION позволяет создать новую хранимую функцию, если функция с тем же
именем отсутствует в базе данных, или изменить описание существующей в базе данных функции.
Если функция с этим именем уже существует, то происходит ее замена на новую хранимую функцию,
при этом существующие привилегии и зависимости сохраняются. Синтаксис оператора:
Листинг 35.38 Синтаксис оператора создания новой или изменения существующей хранимой функции CREATE OR ALTER FUNCTION
CREATE OR ALTER FUNCTION <имя хранимой функции>
[(<входной параметр> [, <входной параметр> ...])]
RETURNS <тип> [COLLATE <сортировка>] [DETERMINISTIC]
[SQL SECURITY {DEFINER | INVOKER}]
{ EXTERNAL NAME '<внешний модуль>' ENGINE <имя движка> [AS <тело внешней функции>]}
|
{
{AS '<BLR код>'}
|{AS
[<объявление> [<объявление> ...] ]
BEGIN
<блок операторов>
END }
}
Семантика операторов и предложений в этом операторе полностью соответствует оператору CREATE FUNCTION.
См. также операторы CREATE FUNCTION, RECREATE FUNCTION, ALTER FUNCTION, DROP FUNCTION, DECLARE VARIABLE, DECLARE CURSOR, DECLARE FUNCTION, DECLARE PROCEDURE.
35.41. CREATE OR ALTER MAPPING
Оператор CREATE OR ALTER MAPPING создаёт новое или изменяет существующее отображение. Если отображение
не существует, то оно будет создано с использованием предложения CREATE MAPPING.
Листинг 35.39 Синтаксис оператора CREATE OR ALTER MAPPING
CREATE OR ALTER [GLOBAL] MAPPING <имя отображения>
USING {
PLUGIN <имя плагина> [IN <имя базы данных>]
| ANY PLUGIN [IN <имя базы данных> | SERVERWIDE]
| MAPPING [IN <имя базы данных>]
| '*' [IN <имя базы данных>] }
FROM { ANY <тип отображаемого объекта> | <тип отображаемого объекта> <имя отображаемого объекта> }
TO { USER | ROLE } [<имя объекта, на которое произведено отображение>]
Семантика операторов и предложений в этом операторе полностью соответствует оператору CREATE MAPPING.
См. также операторы CREATE MAPPING, DROP MAPPING, ALTER MAPPING.
35.42. CREATE OR ALTER PACKAGE
Оператор CREATE OR ALTER PACKAGE создаёт новый или изменяет существующий заголовок пакета.
Синтаксис оператора:
Листинг 35.40 Синтаксис оператора CREATE OR ALTER PACKAGE
CREATE OR ALTER PACKAGE <имя пакета>
[SQL SECURITY {DEFINER | INVOKER}]
AS
BEGIN
[ <объявление процедуры> | <объявление функции> ...]
END
<объявление процедуры> ::=
PROCEDURE <имя процедуры> [(<входной параметр> [, <входной параметр> ...])]
[RETURNS (<выходной параметр> [, <выходной параметр> ...])]
<объявление функции> ::=
FUNCTION <имя функции> [(<входной параметр> [, <входной параметр> ...])]
RETURNS <тип> [COLLATE <сортировка>] [DETERMINISTIC]
<входной параметр> ::= <описание параметра> [{=|DEFAULT} <значение по умолчанию>]
<выходной параметр> ::= <описание параметра>
<описание параметра> ::= <имя параметра> <тип> [NOT NULL]
[COLLATE <порядок сортировки>]
<тип> ::= <тип данных SQL>
| [TYPE OF] <имя домена>
| TYPE OF COLUMN <имя таблицы/представления>.<имя столбца>
<значение по умолчанию>::= {<литерал> | NULL | <контекстная переменная>}
Если заголовок пакета не существует, то он будет создан с использованием предложения CREATE PACKAGE.
Если он уже существует, то он будет изменен и перекомпилирован, при этом существующие привилегии и
зависимости сохраняются.
См. также операторы CREATE PACKAGE BODY, RECREATE PACKAGE, DROP PACKAGE, ALTER PACKAGE, CREATE PACKAGE, CREATE PROCEDURE, CREATE FUNCTION.
35.43. CREATE OR ALTER PROCEDURE
Оператор CREATE OR ALTER PROCEDURE позволяет создать новую хранимую процедуру, если процедура с тем
же именем отсутствует в базе данных. Если такая процедура уже существует, то происходит ее замена
на новую. Синтаксис оператора:
Листинг 35.41 Синтаксис оператора CREATE OR ALTER PROCEDURE
CREATE OR ALTER PROCEDURE <имя хранимой процедуры>
[AUTHID {OWNER | CALLER}]
[(<входной параметр> [, <входной параметр> ...])]
[RETURNS (<выходной параметр> [, <выходной параметр> ...])]
[SQL SECURITY {DEFINER | INVOKER}]
{ EXTERNAL NAME '<внешний модуль>' ENGINE <имя движка> [AS <тело внешней проц.>]} |
{
{AS '<BLR код>'}
|
{AS
[<объявление> [<объявление> ...] ]
BEGIN
<блок операторов>
END }
}
<входной параметр> ::= <описание параметра> [{=|DEFAULT} <значение по умолчанию>]
<выходной параметр> ::= <описание параметра>
<описание параметра> ::= <имя параметра> <тип> [NOT NULL] [COLLATE <порядок сортировки>]
<тип> ::= { <тип данных SQL>
| [TYPE OF] <имя домена>
| TYPE OF COLUMN <имя таблицы/представления>.<имя столбца> }
<значение по умолчанию>::= {<литерал> | NULL | <контекстная переменная>}
<внешний модуль> ::= '<имя внешнего модуля>!<имя функции в модуле>[! <информация>]'
<объявление> ::= <объявление локальной переменной>;
| <объявление курсора>;
| <объявление процедуры/функции>
| <реализация процедуры/функции>
Семантика операторов и предложений в этом операторе полностью соответствует оператору CREATE PROCEDURE.
См. также операторы CREATE PROCEDURE, RECREATE PROCEDURE, ALTER PROCEDURE, DROP PROCEDURE, EXECUTE PROCEDURE, DECLARE VARIABLE, DECLARE CURSOR, DECLARE FUNCTION, DECLARE PROCEDURE.
35.44. CREATE OR ALTER SEQUENCE
С помощью оператора CREATE OR ALTER GENERATOR (SEQUENCE) можно создать новую или изменить существующую последовательность:
Листинг 35.42 Синтаксис оператора CREATE OR ALTER GENERATOR /SEQUENCE
CREATE OR ALTER {GENERATOR | SEQUENCE} <имя генератора>
[{START WITH <начальное значение> | RESTART}]
[INCREMENT [BY] <приращение>];
Если последовательности не существует, то она будет создана. Уже существующая последовательность будет изменена, при этом существующие зависимости последовательности будут сохранены.
Семантика операторов и предложений в этом операторе полностью соответствует оператору CREATE GENERATOR.
См. также операторы CREATE SEQUENCE, DROP GENERATOR, SET GENERATOR, ALTER SEQUENCE, функцию GEN_ID, конструкцию NEXT VALUE FOR.
35.45. CREATE OR ALTER TRIGGER
Оператор CREATE OR ALTER TRIGGER создает новый триггер, если триггера с таким именем не существует
в базе данных. Иначе существующий триггер заменяется на новый синтаксис оператора:
Листинг 35.43 Синтаксис оператора CREATE OR ALTER TRIGGER
CREATE OR ALTER TRIGGER <имя триггера> {
<объявление табличного триггера>
| <объявление табличного триггера в стандарте SQL-2003>
| <объявление триггера базы данных>
| <объявление DDL триггера> }
[SQL SECURITY {DEFINER | INVOKER}]
{ EXTERNAL NAME '<внешний модуль>' ENGINE <имя движка> [AS <тело внеш. триг.>] } |
{
AS
[<объявление> [<объявление> ...] ]
BEGIN
<блок операторов>
END }
<объявление табличного триггера> ::=
FOR {<имя таблицы> | <имя представления>}
[ACTIVE | INACTIVE]
{BEFORE | AFTER} <список событий таблицы (представления)>
[POSITION <порядок срабатывания триггера>]
<объявление табличного триггера в стандарте SQL-2003> ::=
[ACTIVE | INACTIVE]
{BEFORE | AFTER} <список событий таблицы (представления)>
[POSITION <порядок срабатывания триггера>]
ON {<имя таблицы> | <имя представления>}
<объявление триггера базы данных> ::=
[ACTIVE | INACTIVE]
ON <событие соединения или транзакции>
[POSITION <порядок срабатывания триггера>]
<объявление DDL триггера> ::=
[ACTIVE | INACTIVE]
{BEFORE | AFTER} <список DDL событий>
[POSITION <порядок срабатывания триггера>]
<список событий таблицы (представления)> ::= <событие DML> [OR <событие DML>...]
<событие DML> ::= { INSERT | UPDATE | DELETE }
<событие соединения или транзакции> ::= {
CONNECT
| DISCONNECT
| TRANSACTION START
| TRANSACTION COMMIT
| TRANSACTION ROLLBACK }
<список DDL событий> ::= {
ANY DDL STATEMENT
| <DDL событие> [OR <DDL событие> ...] }
<DDL событие> ::=
CREATE|ALTER|DROP TABLE
| CREATE|ALTER|DROP PROCEDURE
| CREATE|ALTER|DROP FUNCTION
| CREATE|ALTER|DROP TRIGGER
| CREATE|ALTER|DROP EXCEPTION
| CREATE|ALTER|DROP VIEW
| CREATE|ALTER|DROP DOMAIN
| CREATE|ALTER|DROP ROLE
| CREATE|ALTER|DROP SEQUENCE
| CREATE|ALTER|DROP USER
| CREATE|ALTER|DROP INDEX
| CREATE|DROP COLLATION
| ALTER CHARACTER SET
| CREATE|ALTER|DROP PACKAGE
| CREATE|DROP PACKAGE BODY
| CREATE|ALTER|DROP MAPPING
<объявление> ::= <объявление локальной переменной>;
| <объявление курсора>;
| <объявление процедуры/функции>
| <реализация процедуры/функции>
Семантика операторов и предложений в этом операторе полностью соответствует оператору CREATE TRIGGER.
См. также операторы CREATE TRIGGER, RECREATE TRIGGER, ALTER TRIGGER, DROP TRIGGER, DECLARE VARIABLE.
35.46. CREATE OR ALTER USER
Можно управлять учётными записями пользователей средствами операторов SQL. Для создания или изменения существующей учетной записи пользователя используется следующий синтаксис:
Листинг 35.44 Синтаксис оператора CREATE OR ALTER USER
CREATE OR ALTER USER <логин>
{
[SET]
[PASSWORD '<пароль>']
[FIRSTNAME '<имя пользователя>']
[MIDDLENAME '<отчество пользователя>']
[LASTNAME '<фамилия пользователя>']
[ACTIVE | INACTIVE]
[TAGS (<атрибут>|DROP <имя атрибута> [, <атрибут>|DROP <имя атрибута>...] )]
}
[USING PLUGIN 'имя плагина']
[{GRANT | REVOKE} ADMIN ROLE];
<атрибут> ::= <имя атрибута> = 'строковое значение'
Примечание
Если предложение USING PLUGIN не указано, то при создании пользователя он сам добавляется во все
плагины из списка параметра DefaultUserManagers (в том числе его атрибуты).
При изменении пароля пользователя он сам меняется у всех плагинов из списка параметра UserManager.
Если в каком-то плагине нет пользователя, то он добавляется.
Если меняется какой-либо другой атрибут, то он также меняется и в других плагинах, но если пользователь отсутствует, то он не создаётся.
См. также операторы CREATE USER, ALTER USER.
35.47. CREATE OR ALTER VIEW
Оператор CREATE OR ALTER VIEW изменяет определение представления (как ALTER VIEW), если оно
существует, или создает его, если оно не существует.
Листинг 35.45 Синтаксис оператора CREATE OR ALTER VIEW
CREATE OR ALTER VIEW <имя представления> [<список столбцов>]
AS <оператор SELECT>
[WITH CHECK OPTION]
<список столбцов> ::= (столбец [, столбец ...])
Все предложения в этом операторе в точности соответствуют предложениям в операторе CREATE VIEW.
См. также операторы CREATE VIEW, RECREATE VIEW, DROP VIEW, ALTER VIEW.
35.48. CREATE PACKAGE
Оператор CREATE PACKAGE создаёт новый заголовок пакета. Синтаксис оператора:
Листинг 35.46 Синтаксис оператора создания заголовка пакета CREATE PACKAGE
CREATE PACKAGE <имя пакета>
[SQL SECURITY {DEFINER | INVOKER}]
AS
BEGIN
[ <объявление процедуры> | <объявление функции> ...]
END
<объявление процедуры> ::=
PROCEDURE <имя процедуры> [(<входной параметр> [, <входной параметр> ...])]
[RETURNS (<выходной параметр> [, <выходной параметр> ...])]
<объявление функции> ::=
FUNCTION <имя функции> [(<входной параметр> [, <входной параметр> ...])]
RETURNS <тип> [COLLATE <сортировка>] [DETERMINISTIC]
<входной параметр> ::= <описание параметра> [{=|DEFAULT} <значение по умолчанию>]
<выходной параметр> ::= <описание параметра>
<описание параметра> ::= <имя параметра> <тип> [NOT NULL]
[COLLATE <порядок сортировки>]
<тип> ::= <тип данных SQL>
| [TYPE OF] <имя домена>
| TYPE OF COLUMN <имя таблицы/представления>.<имя столбца>
<значение по умолчанию>::= {<литерал> | NULL | <контекстная переменная>}
Создать новый заголовок пакета может только администратор и пользователь с привилегией CREATE PACKAGE.
Пользователь, создавший заголовок пакета становится владельцем пакета.
В этом операторе можно:
указать имя пакета (должно быть уникальным среди имён всех пакетов);
задать в контексте какого пользователя будет выполняться пакет;
объявить процедуры и функции (доступны вне тела пакета через полный идентификатор имён процедур и функций (
<имя пакета>.<имя процедуры>и<имя пакета>.<имя функции>)).
Подробнее о пакетах описано в главе 22.
См. также операторы CREATE PACKAGE BODY, RECREATE PACKAGE, DROP PACKAGE, ALTER PACKAGE, CREATE OR ALTER PACKAGE, CREATE PROCEDURE, CREATE FUNCTION.
35.49. CREATE PACKAGE BODY
Оператор CREATE PACKAGE BODY создаёт новое тело пакета. Тело пакета может быть создано только после
того как будет создан заголовок пакета. Если заголовка пакета с именем <имя пакета> не существует,
то будет выдана соответствующая ошибка. Синтаксис оператора:
Листинг 35.47 Синтаксис оператора создания тела пакета CREATE PACKAGE BODY
CREATE PACKAGE BODY <имя пакета>
AS
BEGIN
[ <объявление процедуры> | <объявление функции> ...]
[ <реализация процедуры> | <реализация функции> ...]
END
<объявление процедуры> ::=
PROCEDURE <имя процедуры> [(<входной параметр> [, <входной параметр> ...])]
[RETURNS (<выходной параметр> [, <выходной параметр> ...])]
<объявление функции> ::=
FUNCTION <имя функции> [(<входной параметр> [, <входной параметр> ...])]
RETURNS <тип> [COLLATE <сортировка>] [DETERMINISTIC]
<реализация процедуры> ::=
PROCEDURE <имя процедуры> [(<входной_параметр> [, <входной_параметр> ...])]
[RETURNS (<выходной параметр> [, <выходной параметр> ...])]
{EXTERNAL NAME '<внешний модуль>' ENGINE <имя движка> [AS <тело вн. проц.>]} |
{ AS
[<объявление> [<объявление> ...] ]
BEGIN
<блок операторов>
END }
<реализация функции> ::=
FUNCTION <имя функции> [(<входной_параметр> [, <входной_параметр> ...])]
RETURNS <тип> [COLLATE <сортировка>] [DETERMINISTIC]
{EXTERNAL NAME '<внешний модуль>' ENGINE <имя движка> [AS <тело вн. функ.>]} |
{ AS
[<объявление> [<объявление> ...] ]
BEGIN
<блок операторов>
END }
<входной параметр> ::= <описание параметра> [{=|DEFAULT} <значение по умолчанию>]
<выходной параметр> ::= <описание параметра>
<описание параметра> ::= <имя параметра> <тип> [NOT NULL]
[COLLATE <порядок сортировки>]
<тип> ::= {
<тип данных SQL>
| [TYPE OF] <имя домена>
| TYPE OF COLUMN <имя таблицы/представления>.<имя столбца> }
<значение по умолчанию>::= {<литерал> | NULL | <контекстная переменная>}
<внешний модуль> ::= '<имя внешнего модуля>!<имя функции в модуле>[!<информация>]'
<объявление> ::= <объявление локальной переменной>;
| <объявление курсора>;
| <объявление процедуры/функции>
| <реализация процедуры/функции>
Выполнить оператор создания тела пакета может администратор, владелец пакета или пользователь с привилегией CREATE PACKAGE.
Все процедуры и функции, объявленные в заголовке пакета, должны быть реализованы в теле пакета с той же сигнатурой. Кроме того, должны быть реализованы и все процедуры и функции, объявленные в теле пакета, с той же сигнатурой. Процедуры и функции, определенные в теле пакета, но не объявленные в заголовке пакета, не видны вне тела пакета.
Имена процедур и функций, объявленные в теле пакета, должны быть уникальны среди имён процедур и функций, объявленных в заголовке и теле пакета.
Значения по умолчанию для параметров процедур не могут быть переопределены. Это означает, что они могут быть в реализации только для частных процедур, которые не были объявлены.
Подробнее о пакетах описано в главе 22.
См. также операторы CREATE PACKAGE, RECREATE PACKAGE BODY, DROP PACKAGE BODY, CREATE PROCEDURE, CREATE FUNCTION.
35.50. CREATE POLICY
Для создание политики используется оператор CREATE POLICY. Синтаксис этого оператора приведен ниже:
CREATE POLICY <имя политики> [AS <параметр>=<значение> [,<параметр>=<значение>...]]
Предупреждение
Политики безопасности работают со всеми известными методами аутентификации.
Хотя сами политики хранятся в базе данных безопасности security5.fdb, создать их можно,
соединившись с любой базой данных. Однако пользователь при этом должен иметь права на запись
в базу данных безопасности security5.fdb.
Возможные параметры политик следующие:
AUTH_FACTORS— факторы аутентификации:SRP— пароль (верификатор) SRPLEGACY— пароль Legacy
WIN_SSPIGSSCERTIFICATE— сертификат пользователя
GOSTPASSWORD— пароль по ГОСТ
PSWD_NEED_CHAR— минимальное количество букв в пароле;PSWD_NEED_DIGIT— минимальное количество цифр в пароле;PSWD_NEED_DIFF_CASE— требование использования различных регистров букв в пароле;PSWD_MIN_LEN— минимальная длина пароля;PSWD_VALID_DAYS— срок действия пароля;PSWD_UNIQUE_COUNT— количество последних не повторяющихся паролей;MAX_FAILED_COUNT— количество неудачных попыток входа;MAX_SESSIONS— максимальное число одновременных подключений одного пользователя;MAX_IDLE_TIME— время бездействия, в секундах;MAX_UNUSED_DAYS— максимальное время неактивности учетных записей пользователя, в днях.
Пример создания политики см. в главе 27.
Для удобного просмотра всех созданных политик существует псевдотаблица безопасности
SEC$POLICIES (см. Руководство администратора Приложение Б "Псевдотаблицы безопасности").
См. также операторы ALTER POLICY, DROP POLICY.
35.51. CREATE PROCEDURE
Для создания хранимой процедуры используется оператор CREATE PROCEDURE.
Синтаксис оператора:
Листинг 35.48 Синтаксис оператора CREATE PROCEDURE
CREATE PROCEDURE <имя хранимой процедуры>
[AUTHID {OWNER | CALLER}]
[(<входной параметр> [, <входной параметр> ...])]
[RETURNS (<выходной параметр> [, <выходной параметр> ...])]
[SQL SECURITY {DEFINER | INVOKER}]
{ EXTERNAL NAME '<внешний модуль>' ENGINE <имя движка> [AS <тело внешней проц.>] }
|
{
{AS '<BLR код>'}
|
{AS
[<объявление> [<объявление> ...] ]
BEGIN
<блок операторов>
END }
}
<входной параметр> ::= <описание параметра> [{=|DEFAULT} <значение по умолчанию>]
<выходной параметр> ::= <описание параметра>
<описание параметра> ::= <имя параметра> <тип> [NOT NULL] [COLLATE <порядок сортировки>]
<тип> ::= { <тип данных SQL>
| [TYPE OF] <имя домена>
| TYPE OF COLUMN <имя таблицы/представления>.<имя столбца> }
<значение по умолчанию>::= {<литерал> | NULL | <контекстная переменная>}
<внешний модуль> ::= '<имя внешнего модуля>!<имя функции в модуле>[! <информация>]'
<объявление> ::= <объявление локальной переменной>;
| <объявление курсора>;
| <объявление процедуры/функции>
| <реализация процедуры/функции>
Хранимую процедуру может создать администратор и пользователь с привилегией CREATE PROCEDURE.
В операторе CREATE PROCEDURE можно задать:
имя хранимой процедуры (может содержать до 63 символов и должно быть уникальным среди имен хранимых процедур базы данных, таблиц и представлений);
входные параметры;
выходные параметры;
в контексте какого пользователя будет выполняться процедура;
локальные переменные, курсоры, подпрограммы;
тело хранимой процедуры;
двоичный BLR код вместо исходного SQL текста;
точку входа и имя движка (для внешних процедур).
Подробнее о процедурах описано в главе 19.
См. также операторы CREATE OR ALTER PROCEDURE, RECREATE PROCEDURE, ALTER PROCEDURE, DROP PROCEDURE, EXECUTE PROCEDURE, SELECT, DECLARE VARIABLE, DECLARE CURSOR, DECLARE FUNCTION, DECLARE PROCEDURE.
35.52. CREATE ROLE
Оператор позволяет создать в базе данных безопасности новую роль. Синтаксис оператора:
Листинг 35.49 Синтаксис оператора CREATE ROLE
CREATE ROLE <имя роли>
[SET SYSTEM PRIVILEGES TO <сис.привилегия> [,<сис.привилегия> ...]];
Имя роли может содержать до 63 символов и должно быть уникальным среди всех имен ролей.
Создать новую роль может администратор и пользователь с привилегией CREATE ROLE.
Предложение SET SYSTEM PRIVILEGES TO позволяет создать роль с системными привилегиями.
Подробнее об операторах управления ролями см. в главе 27.
35.53. CREATE SEQUENCE
Другое название для оператора создания генератора. См. в этом приложении CREATE GENERATOR.
Листинг 35.50 Синтаксис оператора CREATE SEQUENCE
CREATE {GENERATOR | SEQUENCE} <имя генератора>;
Создавать последовательности могут администраторы и те пользователи, у кого есть привилегия
CREATE SEQUENCE (CREATE GENERATOR). Пользователь, создавший последовательность, становится её владельцем.
Подробно работа с генераторами описана в главе 13.
См. также операторы CREATE GENERATOR, DROP SEQUENCE, SET GENERATOR, ALTER SEQUENCE, функцию GEN_ID, конструкцию NEXT VALUE FOR.
35.54. CREATE SHADOW
Оператор CREATE SHADOW используется для создания новой оперативной копии для
базы данных. Его синтаксис:
Листинг 35.51 Синтаксис оператора CREATE SHADOW
CREATE SHADOW <номер оперативной копии> [AUTO | MANUAL][CONDITIONAL]
'<спецификация файла>' [LENGTH [=] <целое> [PAGE[S]]]
[<вторичный файл>]...;
<вторичный файл> ::= FILE '<спецификация файла>'
[LENGTH [=] <целое> [PAGE[S]]]
[STARTING [AT [PAGE]] <целое>]
Создать оперативную копию может владелец базы данных, администратор и пользователь с привилегией ALTER DATABASE.
В этом операторе можно указать:
номер оперативной копии — положительное число, идентифицирующее набор файлов данной оперативной копии;
режим работы базы данных, если оперативная копия становится недоступной;
условную оперативную копию, которая заменяет бывшую активной перед этим оперативную копию, которая стала выполнять роль основной базы данных;
размер оперативной копии в страницах базы данных;
вторичные файлы.
Подробно оператор описан в главе 8.
См. также операторы CREATE DATABASE, ALTER DATABASE, DROP DATABASE, DROP SHADOW.
35.55. CREATE TABLE
Оператор CREATE TABLE создает новую таблицу в базе данных. Синтаксис оператора:
Листинг 35.52 Синтаксис оператора CREATE TABLE
CREATE [GLOBAL TEMPORARY] TABLE <имя таблицы>
[EXTERNAL [FILE] '<спецификация файла>' [ADAPTER 'CSV']]
(<определение столбца> [, { <определение столбца> | <ограничение таблицы>}...])
[ON COMMIT {DELETE | PRESERVE} ROWS]
[SQL SECURITY {DEFINER | INVOKER}];
[[IN] TABLESPACE {<имя табличного пространства> | PRIMARY}];
<определение столбца> ::= { <опр-е обычного столбца>
| <опр-е вычисляемого столбца>
| <опр-е идентификационного столбца> }
<определение обычного столбца> ::=
<имя столбца> { <тип данных> | <имя домена>}
[DEFAULT {<литерал> | NULL | <контекстная переменная>}]
[NOT NULL]
[<ограничение столбца>]
[COLLATE <порядок сортировки>]
<определение вычисляемого столбца> ::=
<имя столбца> [<тип данных>]
{COMPUTED [BY] | GENERATED ALWAYS AS} (<выражение>)
<определение идентификационного столбца> ::=
<имя столбца> [<тип данных>]
GENERATED {ALWAYS|BY DEFAULT} AS IDENTITY [(<опции ав.> [<опции ав.>])]
[<ограничение столбца>]
<опции автоинкремента> ::= START WITH <начальное значение>
| INCREMENT [BY] <приращение>
<ограничение столбца> ::=
[CONSTRAINT <имя ограничения>]
{ UNIQUE [<предложение USING>] [[IN] TABLESPACE {<имя табл.пространства>|PRIMARY}]
| PRIMARY KEY [<предложение USING>] [[IN] TABLESPACE {<имя табл.прос-ва>|PRIMARY}]
| REFERENCES <имя таблицы> [(<имя столбца>)]
[ON DELETE { NO ACTION | CASCADE | SET DEFAULT | SET NULL }]
[ON UPDATE { NO ACTION | CASCADE | SET DEFAULT | SET NULL }]
[<предложение USING>] [[IN] TABLESPACE { <имя табл. пространства> | PRIMARY}]
| CHECK (<условие столбца>)
}
<ограничение таблицы> ::=
[CONSTRAINT <имя ограничения>]
{ UNIQUE (<столбец> [, <столбец>...]) [<предложение USING>]
[[IN] TABLESPACE { <имя табличного пространства> | PRIMARY}]
| PRIMARY KEY (<столбец> [, <столбец>...]) [<предложение USING>]
[[IN] TABLESPACE { <имя табличного пространства> | PRIMARY}]
| FOREIGN KEY (<столбец> [, <столбец>...])
| REFERENCES <имя таблицы> [(<столбец> [, <столбец>...])]
[ON DELETE { NO ACTION | CASCADE | SET DEFAULT | SET NULL }]
[ON UPDATE { NO ACTION | CASCADE | SET DEFAULT | SET NULL }]
[<предложение USING>] [[IN] TABLESPACE { <имя табл. пространства> | PRIMARY}]
| CHECK (<условие столбца>)
}
<предложение USING> ::= USING [ASC[ENDING] | DESC[ENDING]] INDEX <имя индекса>
Создать новую таблицу может администратор и пользователь с привилегией CREATE TABLE.
Пользователь, создавший таблицу, становится её владельцем.
С помощью данного оператора можно:
указать имя таблицы (должно быть уникальным среди имен таблиц базы данных, хранимых процедур и представлений, описанных в этой базе данных);
создать глобальную временную таблицу;
использовать внешние файлы;
добавлять столбцы в таблицу, в том числе вычисляемые и идентификационные;
добавлять ограничение таблицы;
изменять привилегии выполнения для таблицы;
Подробно оператор описан в главе 10.
См. также операторы ALTER TABLE, DROP TABLE.
35.56. CREATE TABLESPACE
Для создания табличного пространства используется оператор CREATE TABLESPACE:
Листинг 35.53 Синтаксис оператора создания табличного пространства CREATE TABLESPACE
CREATE TABLESPACE <имя табличного пространства> FILE <путь к файлу>;
Права на создание табличных пространств есть только у администраторов и пользователей с
привилегией CREATE TABLESPACE. Максимально доступно 254 табличных пространства.
Для создания табличного пространства необходимо указать путь к файлу. Можно указывать как абсолютный
путь, так и относительный, в том числе с использованием псевдонима директории, заданного в
directories.conf в секции tablespaces. В directories.conf указывается реальный путь к директории с псевдонимом
<псевдоним директории>. Путь к файлу табличного пространства с использованием псевдонима директории
указывается в формате: <псевдоним директории>/<файл>, например, dir/file.dat. Первый компонент
пути (dir) будет обработан как псевдоним директории. Если псевдоним не будет найден в
directories.conf, то путь будет обработан как относительный (относительно директории,
в которой размещен основной файл базы данных).
Все директории, используемые в пути, должны быть созданы заранее.
В системную таблицу RDB$TABLESPACES в любом случае будет записан абсолютный путь к файлу табличного пространства.
См. также операторы ALTER TABLESPACE, DROP TABLESPACE.
35.57. CREATE TRIGGER
Оператор CREATE TRIGGER создает новый триггер.
Синтаксис:
Листинг 35.54 Синтаксис оператора CREATE TRIGGER
CREATE TRIGGER <имя триггера> {
<объявление табличного триггера>
| <объявление табличного триггера в стандарте SQL-2003>
| <объявление триггера базы данных>
| <объявление DDL триггера> }
[SQL SECURITY {DEFINER | INVOKER}]
{ EXTERNAL NAME '<внешний модуль>' ENGINE <имя движка> [AS <тело внеш. триг.>]} |
{
AS
[<объявление> [<объявление> ...] ]
BEGIN
<блок операторов>
END }
<объявление табличного триггера> ::=
FOR {<имя таблицы> | <имя представления>}
[ACTIVE | INACTIVE]
{BEFORE | AFTER} <список событий таблицы (представления)>
[POSITION <порядок срабатывания триггера>]
<объявление табличного триггера в стандарте SQL-2003> ::=
[ACTIVE | INACTIVE]
{BEFORE | AFTER} <список событий таблицы (представления)>
[POSITION <порядок срабатывания триггера>]
ON {<имя таблицы> | <имя представления>}
<объявление триггера базы данных> ::=
[ACTIVE | INACTIVE]
ON <событие соединения или транзакции>
[POSITION <порядок срабатывания триггера>]
<объявление DDL триггера> ::=
[ACTIVE | INACTIVE]
{BEFORE | AFTER} <список DDL событий>
[POSITION <порядок срабатывания триггера>]
<список событий таблицы (представления)> ::= <событие DML> [OR <событие DML>...]
<событие DML> ::= { INSERT | UPDATE | DELETE }
<событие соединения или транзакции> ::= {
CONNECT
| DISCONNECT
| TRANSACTION START
| TRANSACTION COMMIT
| TRANSACTION ROLLBACK }
<список DDL событий> ::= {
ANY DDL STATEMENT
| <DDL событие> [OR <DDL событие> ...] }
<DDL событие> ::=
CREATE|ALTER|DROP TABLE
| CREATE|ALTER|DROP PROCEDURE
| CREATE|ALTER|DROP FUNCTION
| CREATE|ALTER|DROP TRIGGER
| CREATE|ALTER|DROP EXCEPTION
| CREATE|ALTER|DROP VIEW
| CREATE|ALTER|DROP DOMAIN
| CREATE|ALTER|DROP ROLE
| CREATE|ALTER|DROP SEQUENCE
| CREATE|ALTER|DROP USER
| CREATE|ALTER|DROP INDEX
| CREATE|DROP COLLATION
| ALTER CHARACTER SET
| CREATE|ALTER|DROP PACKAGE
| CREATE|DROP PACKAGE BODY
| CREATE|ALTER|DROP MAPPING
<объявление> ::= <объявление локальной переменной>;
| <объявление курсора>;
| <объявление процедуры/функции>
| <реализация процедуры/функции>
Табличный триггер может быть создан владельцем таблицы (представления), для которого создается DML триггер,
администратором и пользователем с привилегией ALTER ANY {TABLE|VIEW\. Триггеры на события базы данных
и на события изменения метаданных может создаваться только владельцем базы данных, администратором и
пользователем с привилегией ALTER DATABASE.
С помощью этого оператора можно:
задать имя триггера (может содержать до 63 символов и должно быть уникальным среди имен всех триггеров базы данных);
объявить табличный триггер, триггер на события базы данных или DML триггер;
указать состояние триггера: активный или неактивный;
указать место расположения триггера во внешнем модуле
указать в контексте какого пользователя будет выполняться триггер;
описать произвольное количество локальных переменных, именованных курсоров и подпрограммы (подпроцедуры и подфункции);
задать блок операторов в теле триггера.
Подробно оператор описан в главе 21.
См. также операторы ALTER TRIGGER, CREATE OR ALTER TRIGGER, RECREATE TRIGGER, DROP TRIGGER.
35.58. CREATE USER
Для создания новой учетной записи пользователя используется следующий синтаксис:
Листинг 35.55 Синтаксис оператора CREATE USER
CREATE USER <логин> PASSWORD '<пароль>'
[FIRSTNAME '<имя пользователя>']
[MIDDLENAME '<отчество пользователя>']
[LASTNAME '<фамилия пользователя>']
[ACTIVE | INACTIVE]
[USING PLUGIN 'имя плагина']
[TAGS (<атрибут> [, <атрибут> ...] )]
[GRANT ADMIN ROLE]
<атрибут> ::= <имя атрибута> = 'строковое значение'
Пользователь должен отсутствовать в текущей базе данных безопасности РЕД Базе Данных иначе будет выдано соответствующее сообщение об ошибке.
Начиная с версии 3.0 имена пользователей подчиняются общему правилу наименования идентификаторов объектов
метаданных. Таким образом, пользователь с именем "Alex" и с именем "ALEX" будут разными пользователями.
Предложение PASSWORD задаёт пароль пользователя. Максимальная длина пароля зависит от того какой
менеджер пользователей задействован (параметр UserManager в файле конфигурации firebird.conf).
Для менеджер пользователей SRP эффективная длина пароля ограничена 20 байтами.
Для менеджер пользователей Legacy_UserManager максимальная длина пароля равна 8 байт.
Необязательные предложения FIRSTNAME, MIDDLENAME и LASTNAME задают
дополнительные атрибуты пользователя, такие как имя пользователя, отчество и фамилия соответственно.
Кроме того можно задать неограниченное количество пользовательских атрибутов с
помощью необязательного предложения TAGS.
Если при создании учётной записи будет указан атрибут INACTIVE, то пользователь будет создан в "неактивном состоянии",
т.е. подключиться с его учётной записью будет невозможно. При указании атрибута ACTIVE пользователь будет создан в
активном состоянии (по умолчанию).
С опцией GRANT ADMIN ROLE создаётся новый пользователь с правами роли RDB$ADMIN в базе данных
пользователя (security5.fdb). Это позволяет ему управлять учётными записями пользователей, но не
дает ему специальных полномочий в обычных базах данных.
Необязательное предложение USING PLUGIN позволяет явно указывать какой плагин
управления пользователями будет использован. По умолчанию используется тот плагин,
который был указан первым в списке параметра UserManager в файле конфигурации
firebird.conf. Допустимыми являются только значения, перечисленные в параметре
UserManager. Следует учитывать, что одноименные пользователи, созданные с помощью разных
плагинов управления пользователями — это разные пользователи.
Примечание
Если предложение USING PLUGIN не указано, то при добавлении пользователя он сам добавляется во
все плагины из списка параметра DefaultUserManagers (в том числе его атрибуты).
CREATE USER jon PASSWORD '87654321'
FIRSTNAME 'Jon'
LASTNAME 'Snow'
TAGS (BIRTHYEAR = '283' , CITY = 'Winterfell');
См. также операторы ALTER USER, DROP USER.
35.59. CREATE VIEW
Оператор CREATE VIEW создает новое представление. Его синтаксис:
Листинг 35.56 Синтаксис оператора CREATE VIEW
CREATE VIEW <имя представления> [<список столбцов>]
AS <оператор SELECT>
[WITH CHECK OPTION]
<список столбцов> ::= (столбец [, столбец ...])
Представления могут создаваться администраторами и пользователями с привилегией CREATE VIEW.
Пользователь, создавший представление, становится его владельцем. Для создания представления
пользователями, которые не имеют административных привилегий, необходимы также привилегии на
чтение (SELECT) данных из базовых таблиц и представлений, и привилегии на выполнение (EXECUTE)
используемых селективных хранимых процедур. Для разрешения вставки, обновления и удаления через
представление, необходимо чтобы создатель (владелец) представления имел привилегии INSERT, UPDATE
и DELETE на базовые объекты метаданных.
Имя представления должно быть уникальным среди имен всех представлений, таблиц и хранимых процедур базы данных.
Оператор
SELECTможет быть оператором выборки данных любой сложности. Здесь можно выполнять объединение (UNION) и соединение (JOIN) различных таблиц, использовать предложениеWHEREдля задания условий выбора строк.Представление может быть изменяемым (в двух вариантах — естественно изменяемым или изменяемым при помощи вспомогательных триггеров) или неизменяемым, только для чтения (
read-only).Необязательное предложение
WITH CHECK OPTIONзадает для изменяемого представления требование проверки соответствия вновь вводимых или изменяемых данных условию, заданному в предложенииWHERE.
Подробно оператор создания представления описан в главе 16.
Возможности оператора SELECT см. в главе 12.
См. также операторы CREATE OR ALTER VIEW, RECREATE VIEW, DROP VIEW, ALTER VIEW, INSERT, UPDATE, UPDATE OR INSERT, DELETE.
35.60. DECLARE EXTERNAL FUNCTION
Оператор DECLARE EXTERNAL FUNCTION объявляет функцию, определенную пользователем
(UDF — User Defined Function). Его синтаксис:
Листинг 35.57 Синтаксис оператора DECLARE EXTERNAL FUNCTION
DECLARE EXTERNAL FUNCTION <имя UDF>
[<тип данных> [{BY DESCRIPTOR} | NULL] | CSTRING (<целое>) [NULL]
[, <тип данных> [{BY DESCRIPTOR} | NULL] | CSTRING (<целое>) [NULL] ...]]
RETURNS {
<тип данных> [BY VALUE | BY DESCRIPTOR]
| CSTRING (<целое>)
| PARAMETER <номер> }
[FREE_IT]
ENTRY_POINT '<имя точки входа>'
MODULE_NAME '<имя модуля>';
Объявить внешнюю функцию может пользователь с административными привилегиями и пользователь
с привилегией CREATE FUNCTION. Пользователь, объявивший внешнюю функцию, становится её владельцем.
С помощью данного оператора можно:
задать имя функции;
перечислить входные параметры, передаваемые функции
задать возвращаемый тип данных;
указать как возвращается данное — по значению или по ссылке;
задать передачу параметров по дескриптору;
задать имя модуля и имя точки входа для функции в модуле.
Подробнее оператор рассмотрен в :34.
См. также оператор ALTER EXTERNAL FUNCTION, DROP EXTERNAL FUNCTION.
35.61. DECLARE FILTER
Оператор DECLARE FILTER объявляет существующий BLOB фильтр в базе данных.
BLOB фильтр – объект базы данных, подпрограмма, которая транслирует объекты BLOB из одного
формата в другой. Форматы объектов BLOB задаются с помощью подтипов BLOB. Внешние функции
для преобразования BLOB типов хранятся в динамических библиотеках и загружаются по необходимости.
Листинг 35.58 Синтаксис оператора DECLARE FILTER
DECLARE FILTER <имя фильтра>
INPUT_TYPE <подтип BLOB> OUTPUT_TYPE <подтип BLOB>
ENTRY_POINT 'Имя экспортируемой функции'
MODULE_NAME 'Имя модуля с фильтром'
<подтип BLOB> ::= номер подтипа | <мнемоника подтипа>
<мнемоника подтипа> ::= binary | text | blr | acl | ranges | summary |
format | transaction_description |
external_file_description | <user_defined>
Создать BLOB фильтр может администратор и пользователь с привилегией CREATE FILTER.
С помощью данного оператора можно:
задать имя
BLOBфильтра (должно быть уникальным среди именBLOBфильтров);установить подтип
BLOBпреобразуемого объекта;установить подтип
BLOBсоздаваемого объекта;указать имя модуля и имя экспортируемой функции (точки входа) в модуле.
Подробнее оператор рассмотрен в главе 14.
См. также оператор DROP FILTER.
35.62. DELETE
Оператор DELETE используется для удаления существующих строк из таблицы или представления.
Он позволяет удалить все или группу строк таблицы (таблиц представления). Синтаксис оператора:
Листинг 35.59 Синтаксис оператора DELETE
DELETE FROM {<имя таблицы> | <имя представления>} [[AS] <псевдоним>]
[WHERE { <условие поиска> | CURRENT OF <имя курсора>}]
[PLAN <план>]
[ORDER BY <упорядочиваемый элемент> [, <упорядочиваемый элемент> ... ]]
[ROWS <m> [TO <n>]]
[SKIP LOCKED]
[RETURNING {<список возвращаемых значений> | *} [INTO <переменные>]]
<список возвращаемых значений> ::= <имя столбца> [[AS] <алиас>] [, <имя столбца> [[AS] <алиас>]...]
<переменные> ::= [:]<имя переменной> [, [:]<имя переменной> ...];
Удалять данные из таблицы или представления может их владелец, пользователь SYSDBA,
пользователь операционной системы root (Linux), trusted user (Windows), а также пользователь,
которому предоставлено право на удаление строк из таблицы или представления оператором
GRANT DELETE — см. документ «Руководство администратора». Если удаление строки таблицы влечет
и удаление подчиненных строк из дочерней таблицы, то и к этой таблице пользователь должен иметь
соответствующие полномочия.
Предложение
WHEREограничивает набор удаляемых записей заданным условием или текущей строкой именованного курсора;Ключевое слово
PLANзадает план выборки данных для удаления;Предложение
ORDER BYиспользуется для упорядочения результатов выборки;Предложение
SKIP LOCKEDпозволяет пропускать записи, заблокированные другими транзакциями, вместо того чтобы ждать их разблокирования или выдавать ошибку конфликта обновления;Предложение
RETURNINGпозволяет вернуть вызвавшей программе значения указанных столбцов удаленной строки.
Подробнее об операторе удаления см. в главе 12.
См. также операторы INSERT, UPDATE, UPDATE OR INSERT.
35.63. DROP COLLATION
Оператор DROP COLLATION удаляет указанную сортировку. Сортировка должна присутствовать в базе данных,
иначе будет выдана соответствующая ошибка.
Листинг 35.60 Синтаксис оператора DROP COLLATION
DROP COLLATION <имя сортировки>;
Выполнить данный оператор может только администратор, владелец сортировки и пользователь с привилегией DROP ANY COLLATION.
См. также оператор CREATE COLLATION.
35.64. DROP DATABASE
Для удаления существующей базы данных используется оператор SQL DROP DATABASE. Его синтаксис:
Листинг 35.61 Синтаксис оператора DROP DATABASE
DROP DATABASE;
Прежде чем удалять базу данных, с ней нужно соединиться. Оператор удаляет первичный, все вторичные файлы базы данных и все файлы оперативных копий (см. CREATE SHADOW), связанные с этой базой данных.
Удалять базу данных может ее владелец, администратор и пользователь с привилегией DROP DATABASE.
Подробно оператор описан в главе 7.
См. также операторы CREATE DATABASE, ALTER DATABASE, CREATE SHADOW, DROP SHADOW.
35.65. DROP DOMAIN
Оператор DROP DOMAIN удаляет из базы данных существующий домен. Синтаксис оператора:
Листинг 35.62 Синтаксис оператора DROP DOMAIN
DROP DOMAIN <имя домена>;
Нельзя удалить домен, на который ссылаются столбцы таблиц базы данных. Предварительно нужно удалить все столбцы, ссылающиеся на этот домен.
Удалить существующий домен может владелец домена (его создатель), пользователь с административными
привилегиями или пользователь с привилегией DROP ANY DOMAIN.
См. также операторы CREATE DOMAIN, ALTER DOMAIN.
35.66. DROP EXCEPTION
Оператор позволяет удалить указанное пользовательское исключение из базы данных. Его синтаксис:
Листинг 35.63 Синтаксис оператора DROP EXCEPTION
DROP EXCEPTION <имя исключения>;
Удалить пользовательское исключение может администратор, владелец исключения или пользователь с привилегией DROP ANY EXCEPTION.
При наличии зависимостей для существующего исключения удаления не будет выполнено.
См. также операторы CREATE EXCEPTION, ALTER EXCEPTION, операторы PSQL WHEN-DO, EXCEPTION.
35.67. DROP EXTERNAL FUNCTION
Оператор DROP EXTERNAL FUNCTION удаляет объявление функции определённой пользователем из базы
данных. Если есть зависимости от внешней функции, то удаления не произойдёт и будет выдана соответствующая ошибка.
Листинг 35.64 Синтаксис оператора DROP EXTERNAL FUNCTION
DROP EXTERNAL FUNCTION <имя UDF>;
Удалить внешнюю функцию может администратор, владелец функции (ее создатель) или пользователь с привилегией DROP ANY FUNCTION.
См. также операторы DECLARE EXTERNAL FUNCTION, ALTER EXTERNAL FUNCTION.
35.68. DROP FILTER
Данный оператор удаляет объявление BLOB фильтра из базы данных.
Листинг 35.65 Синтаксис оператора DROP FILTER
DROP FILTER <имя фильтра>
Удаление BLOB фильтра из базы данных делает его недоступным из базы данных. Но динамическая библиотека,
в которой расположена функция преобразования, остается нетронутой.
Удалить объявление BLOB фильтра администратор, владелец фильтра и пользователь с привилегией DROP ANY FILTER.
См. также оператор DECLARE FILTER.
35.69. DROP FUNCTION
Для удаления существующей хранимой функции используется оператор DROP FUNCTION. Синтаксис оператора:
Листинг 35.66 Синтаксис оператора удаления хранимой функции DROP FUNCTION
DROP FUNCTION <имя хранимой процедуры>
Если от хранимой функции существуют зависимости, то при попытке удаления такой функции будет выдана соответствующая ошибка.
Удалить хранимую функцию может администратор, владелец хранимой функции и пользователь с привилегией DROP ANY FUNCTION.
См. также операторы CREATE FUNCTION, RECREATE FUNCTION, ALTER FUNCTION, CREATE OR ALTER FUNCTION.
35.70. DROP GENERATOR
Оператор DROP GENERATOR (DROP SEQUENCE) удаляет генератор из базы данных.
Синтаксис:
Листинг 35.67 Синтаксис оператора DROP GENERATOR
DROP {GENERATOR | SEQUENCE} <имя генератора>;
Нельзя удалить генератор, если на него есть ссылки в триггерах или хранимых процедурах базы данных.
Удалять генераторы могут администраторы, владельцы последовательности и пользователи с привилегией
DROP ANY SEQUENCE (DROP ANY GENERATOR).
Подробно работа с генераторами описана в главе 13.
См. также операторы DROP SEQUENCE, CREATE GENERATOR, CREATE SEQUENCE, SET GENERATOR, ALTER SEQUENCE, функцию GEN_ID, конструкцию NEXT VALUE FOR.
35.71. DROP INDEX
Оператор DROP INDEX удаляет существующий индекс из базы данных. Его синтаксис:
Листинг 35.68 Синтаксис оператора DROP INDEX
DROP INDEX <имя индекса>;
Нельзя удалить индекс, созданный автоматически системой для первичного, уникального или внешнего ключа.
Удалить индекс может только владелец таблицы, для которой создан индекс, администратор и пользователь с привилегией ALTER ANY TABLE.
Подробно оператор описан в главе 15.
См. также операторы CREATE INDEX, ALTER INDEX.
35.72. DROP JOB
Оператор удаления задания доступен создателю задания и SYSDBA.
Листинг 35.69 Синтаксис оператора DROP JOB
DROP JOB <имя_задания>;
Подробно оператор описан в главе 24.
См. также операторы CREATE JOB, ALTER JOB.
35.73. DROP MAPPING
Оператор DROP MAPPING удаляет существующее отображение. Если указана опция GLOBAL,
то будет удалено глобальное отображение.
Листинг 35.70 Синтаксис оператора DROP MAPPING
DROP [GLOBAL] MAPPING <имя отображения>
Удалить отображение может SYSDBA, владелец базы данных (если отображение локальное), пользователь
с ролью RDB$ADMIN, пользователь root (Linux).
См. также операторы CREATE OR ALTER MAPPING, CREATE MAPPING, ALTER MAPPING.
35.74. DROP PACKAGE
Оператор DROP PACKAGE удаляет существующий заголовок пакета. Синтаксис оператора:
Листинг 35.71 Синтаксис оператора удаления заголовка пакета DROP PACKAGE
DROP PACKAGE <имя пакета>
Выполнить удаление заголовка пакета может администратор, владелец пакета или пользователь с
привилегией DROP ANY PACKAGE.
Перед удалением заголовка пакета, необходимо выполнить удаление тела пакета (DROP PACKAGE BODY),
иначе будет выдана ошибка. Если от заголовка пакета существуют зависимости, то при попытке удаления
такого заголовка будет выдана соответствующая ошибка.
Подробно оператор описан в главе 22.
См. также операторы DROP PACKAGE BODY, RECREATE PACKAGE, CREATE PACKAGE, ALTER PACKAGE, CREATE OR ALTER PACKAGE.
35.75. DROP PACKAGE BODY
Оператор DROP PACKAGE BODY удаляет существующее тело пакета. Синтаксис оператора:
Листинг 35.72 Синтаксис оператора удаления тела пакета DROP PACKAGE BODY
DROP PACKAGE BODY <имя пакета>
Выполнить удаление заголовка пакета может администратор, владелец пакета или пользователь с привилегией DROP ANY PACKAGE.
Подробно оператор описан в главе 22.
См. также операторы DROP PACKAGE, RECREATE PACKAGE BODY, CREATE PACKAGE BODY.
35.76. DROP POLICY
Для удаления политики безопасности администратору необходимо соединиться с какой-либо базой данных.
Для удаления политики используется оператор DROP POLICY. Синтаксис этого оператора приведен ниже:
DROP POLICY <имя политики>
См. также операторы CREATE POLICY, ALTER POLICY.
35.77. DROP PROCEDURE
Для удаления существующей хранимой процедуры используется оператор DROP PROCEDURE. Синтаксис оператора:
Листинг 35.73 Синтаксис оператора DROP PROCEDURE
DROP PROCEDURE <имя хранимой процедуры>;
Нельзя удалить хранимую процедуру, к которой существуют обращения из других хранимых процедур, триггеров и представлений. Также нельзя удалить хранимую процедуру, которая выполняется в настоящий момент.
Удалить хранимую процедуру может ее создатель и администратор (пользователь с ролью RDB$ADMIN) и
пользователь с привилегией DROP ANY PROCEDURE.
Подробно оператор описан в главе 19.
См. также операторы ALTER PROCEDURE, CREATE PROCEDURE, CREATE OR ALTER PROCEDURE, RECREATE PROCEDURE, EXECUTE PROCEDURE.
35.78. DROP ROLE
Оператор удаляет существующую роль из базы данных. Синтаксис оператора:
Листинг 35.74 Синтаксис оператора DROP ROLE
DROP ROLE <имя роли>;
Удаляется созданная ранее роль. При этом также удаляются все привилегии пользователей, полученные с этой ролью.
Роль может удалить ее владелец или администратор (пользователь с ролью RDB$ADMIN).
См. также операторы CREATE ROLE, GRANT, REVOKE, CONNECT.
35.79. DROP SEQUENCE
Другое название для оператора удаления генератора.
Листинг 35.75 Синтаксис оператора DROP SEQUENCE
DROP SEQUENCE <имя генератора>;
Удалять генераторы могут администраторы, владельцы последовательности и пользователи с
привилегией DROP ANY SEQUENCE (DROP ANY GENERATOR).
Оператор удаляет указанный генератор. Подробно работа с генераторами описана в главе 13.
См. также оператор DROP GENERATOR.
35.80. DROP SHADOW
Оператор DROP SHADOW удаляет указанную оперативную копии из базы данных, с которой в настоящий
момент существует соединение. Его синтаксис:
Листинг 35.76 Синтаксис оператора DROP SHADOW
DROP SHADOW <номер оперативной копии> [{PRESERVE | DELETE} FILE];
Номер оперативной копии — положительное число, идентифицирующее набор файлов ранее созданной оперативной копии.
При удалении оперативной копии прекращается процесс дублирования данных в этой оперативной копии.
Если указана опция DELETE FILE (по умолчанию), то будут также удалены и все связанные файлы
с этой теневой копией. Если указана опция PRESERVE FILE, то файлы останутся не тронутыми.
Это может быть полезно, если делать резервную копию с теневого файла.
Оперативная копия может быть удалена владельцем базы данных, администратором пользователем с
привилегией ALTER DATABASE.
Подробно оператор описан в главе 8.
См. также операторы CREATE DATABASE, ALTER DATABASE, DROP DATABASE, CREATE SHADOW.
35.81. DROP TABLE
Для удаления существующей в базе данных таблицы используется оператор DROP TABLE.
Удалять таблицу может ее владелец, администратор и пользователь с привилегией DROP ANY TABLE.
Синтаксис оператора:
Листинг 35.77 Синтаксис оператора DROP TABLE
DROP TABLE <имя таблицы>;
Нельзя удалить таблицу, которая является родительской в связке внешний ключ/первичный (уникальный) ключ. Нельзя удалить таблицу, на которую существуют ссылки в триггерах (за исключением триггеров, написанных пользователем именно для этой таблицы), которая используется в хранимой процедуре или в представлении.
Подробно оператор описан в главе 10.
См. также операторы CREATE TABLE, ALTER TABLE.
35.82. DROP TABLESPACE
Для удаления существующего табличного пространства используется оператор DROP TABLESPACE.
Листинг 35.78 Синтаксис оператора удаления табличного пространства DROP TABLESPACE
DROP TABLESPACE <имя табличного пространства>;
Если в удаляемом табличном пространстве хранятся таблицы или индексы, то будет выдано сообщение об ошибке.
Права на удаление табличных пространств есть только у администраторов и пользователей с привилегией DROP ANY TABLESPACE.
См. также операторы CREATE TABLESPACE, ALTER TABLESPACE.
35.83. DROP TRIGGER
Оператор DROP TRIGGER удаляет существующий триггер. Синтаксис оператора:
Листинг 35.79 Синтаксис оператора DROP TRIGGER
DROP TRIGGER <имя триггера>;
DML триггер может быть удален администратором и владельцем таблицы или представления или пользователем
с привилегией ALTER ANY {TABLE | VIEW\. Триггеры для событий базы данных и триггеры событий на
изменение метаданных может удалить администратор, владелец базы данных или пользователь с привилегией ALTER DATABASE.
Нельзя удалить триггер, автоматически созданный системой для поддержания ограничений PRIMARY KEY, CHECK
и FOREIGN KEY. Остальные триггеры не имеют никаких зависимостей, которые ограничили бы возможности удаления триггеров.
Подробно оператор описан в главе 21.
См. также операторы CREATE TRIGGER, CREATE OR ALTER TRIGGER, RECREATE TRIGGER, ALTER TRIGGER.
35.84. DROP USER
Можно управлять учётными записями пользователей средствами операторов SQL. Для удаления существующей учетной записи пользователя используется следующий синтаксис:
Листинг 35.80 Синтаксис оператора DROP USER
DROP USER <логин>
[USING PLUGIN 'имя плагина'];
Для удаления учетной записи пользователя текущий пользователь должен обладать административными привилегиями в базе данных безопасности.
Необязательное предложение USING PLUGIN позволяет явно указывать какой плагин управления
пользователями будет использован. По умолчанию используется тот плагин, который был указан
первым в списке параметра UserManager в файле конфигурации firebird.conf. Допустимыми
являются только значения, перечисленные в параметре UserManager. Следует учитывать, что
одноименные пользователи, созданные с помощью разных плагинов управления пользователями — это разные пользователи.
Примечание
Если предложение USING PLUGIN не указано, то при удалении пользователя он сам удаляется
из всех плагинов из списка параметра DefaultUserManagers.
См. также операторы CREATE USER, ALTER USER, CREATE OR ALTER USER.
35.85. DROP VIEW
Для удаления существующего в базе данных представления используется оператор DROP VIEW. Его синтаксис:
Листинг 35.81 Синтаксис оператора DROP VIEW
DROP VIEW <имя представления>
Представление нельзя удалить, если не него есть ссылки в другом представлении, в хранимой процедуре или в
ограничении CHECK столбца таблицы или соответствующего ограничения таблицы.
Удалить представление может только владелец представления, администратор, пользователь с привилегией DROP ANY VIEW.
В SQL не существует средств для изменения созданных оператором CREATE VIEW представлений. Для того
чтобы изменить представление, его нужно удалить, а затем создать с требуемыми новыми характеристиками.
Подробно оператор описан в главе 16.
См. также операторы CREATE VIEW, RECREATE VIEW, CREATE OR ALTER VIEW, ALTER VIEW.
35.86. EXECUTE BLOCK
Оператор EXECUTE BLOCK позволяет из декларативной части SQL (DSQL) выполнять действия, доступные в хранимых процедурах и триггерах.
Листинг 35.82 Синтаксис оператора EXECUTE BLOCK
EXECUTE BLOCK
[(<список входных параметров>)]
[RETURNS (<список выходных параметров>)]
AS
[<объявление> [<объявление> ...] ]
BEGIN
<блок операторов>
END;
<список входных параметров>::=<описание параметра>=? [,<описание параметра>=?...]
<список выходных параметров> ::= <описание параметра> [, <описание параметра>]
<описание параметра> ::= <имя параметра> <тип> [NOT NULL]
[COLLATE <порядок сортировки>]
<тип> ::= <тип данных SQL>
| [TYPE OF] <имя домена>
| TYPE OF COLUMN <имя таблицы/представления>.<имя столбца>
<объявление> ::= объявление локальной переменной
| объявление курсора
| <объявление подпрограммы (процедуры или функции)>
| <реализация подпрограммы (процедуры или функции)>
Список входных параметров можно задавать в случае, если оператор EXECUTE BLOCK выполняется из
какой-либо графической программы, которая имеет возможность задать значения входных параметров.
В isql такой список использовать нельзя.
Тело анонимного PSQL блока может содержать объявление локальных переменных, курсоров и блок PSQL операторов. В блоке операторов выполняются произвольные действия по обработке данных.
Анонимный PSQL блок не определяется и сохраняется как объект метаданных.
Подробно оператор описан в главе 12.
См. также операторы CREATE PROCEDURE, ALTER PROCEDURE, DROP PROCEDURE.
35.87. EXECUTE PROCEDURE
В DSQL, в языке хранимых процедур и триггеров и при использовании утилиты isql можно вызвать выполняемую
хранимую процедуру, используя оператор EXECUTE PROCEDURE. Его синтаксис:
Листинг 35.83 Синтаксис оператора EXECUTE PROCEDURE
EXECUTE PROCEDURE <имя процедуры> [(<параметр> [, <параметр>] ...)]
[RETURNING_VALUES (<параметр> [, <параметр>] ...)];
При вызове хранимой процедуры можно после имени процедуры указать список
входных параметров для процедуры. Если процедура получает параметры, то
список входных параметров в операторе EXECUTE PROCEDURE является
обязательным. При этом требуется полное соответствие количества
параметров и их типов данных.
Если этот оператор вызывается из isql, то нельзя использовать предложение RETURNING_VALUES.
Подробно оператор описан в главе 12.
См. также операторы CREATE PROCEDURE, ALTER PROCEDURE, DROP PROCEDURE, SELECT.
35.88. GRANT
Оператор предоставляет одну или несколько привилегий для объектов базы данных пользователям, ролям, хранимым процедурам, функциям, пакетам, триггерам и представлениям. Синтаксис оператора:
Листинг 35.84 Синтаксис оператора GRANT
GRANT <табличные привилегии> ON [TABLE] {<имя таблицы/представления>}
TO <список получателей привилегий> [WITH GRANT OPTION]
[{GRANTED BY|AS} [USER] <имя грантора>]
GRANT EXECUTE ON {PROCEDURE | FUNCTION | PACKAGE} <имя процедуры/функции/пакета>
TO <список получателей привилегий> [WITH GRANT OPTION]
[{GRANTED BY|AS} [USER] <имя грантора>]
GRANT USAGE ON {EXCEPTION <имя искл-я>|{GENERATOR | SEQUENCE} <имя генератора>}
TO <список получателей привилегий> [WITH GRANT OPTION]
[{GRANTED BY|AS} [USER] <имя грантора>]
GRANT {ALL [PRIVILEGES] | {CREATE|ALTER ANY|DROP ANY} [, {CREATE|ALTER ANY| DROP ANY}...] } <объект>
TO <список получателей привилегий> [WITH GRANT OPTION]
[{GRANTED BY|AS} [USER] <имя грантора>]
GRANT CREATE DATABASE TO {USER <имя пользователя>|ROLE <имя роли>|GROUP <имя группы в Unix>} [,{USER <имя пользователя>|ROLE <имя роли>|GROUP <имя группы в Unix>}...]
GRANT {ALL [PRIVILEGES] | {ALTER|DROP} [,{ALTER|DROP}...]} DATABASE
TO <список получателей привилегий> [WITH GRANT OPTION]
[{GRANTED BY|AS} [USER] <имя грантора>]
GRANT [DEFAULT] <имя роли> [, [DEFAULT] <имя роли> ...]
TO [USER]|[ROLE] <имя польз-я/роли> [, [USER]|[ROLE] <имя польз-я/роли>...]
[WITH ADMIN OPTION] [{GRANTED BY | AS} [USER] <имя грантора>]
GRANT POLICY <имя_политики> TO <имя_пользователя>
<табличные привилегии> ::= ALL [PRIVILEGES] | <привилегия> [, <привилегия>...]
<привилегия> ::= SELECT
| DELETE
| INSERT
| UPDATE [(<имя столбца [, <имя столбца>...]>)]
| REFERENCES [(<имя столбца [, <имя столбца>...]>)]
<объект> ::= TABLE
| TABLESPACE
| VIEW
| PROCEDURE
| FUNCTION
| PACKAGE
| GENERATOR
| SEQUENCE
| DOMAIN
| EXCEPTION
| ROLE
| CHARACTER SET
| COLLATION
| FILTER
| JOB
<список получателей привилегий> ::= {<объект получатель>|<пользователь получатель>}
[, {<объект получатель>|<пользователь получатель>}...]
<объект получатель> ::= PROCEDURE <имя процедуры>
| FUNCTION <имя функции>
| PACKAGE <имя пакета>
| TRIGGER <имя триггера>
| VIEW <имя представления>
| SYSTEM PRIVILEGE <системная привилегия> }
<пользователь получатель> ::= [USER] <имя пользователя>
| [ROLE] <имя роли>
| GROUP <имя группы в Unix>
Все привилегии по доступу к объектам базы данных хранятся в самой базе, и не могут быть применены к любой другой базе данных.
Авторизованный пользователь не имеет никаких привилегий до тех пор, пока какие либо права не будут
предоставлены ему явно. SYSDBA или владелец объекта могут выдавать привилегии другим пользователям,
в том числе и привилегии на право выдачи привилегий другим пользователям.
Оператор позволяет выполнить одно из следующих действий:
предоставить одну или несколько привилегий для таблиц и представлений пользователям, ролям, представлениям, хранимым процедурам, триггерам, пакетам и функциям;
выдать права на выполнение процедуры, функции или пакета пользователям, ролям, представлениям, хранимым процедурам, триггерам, пакетам и функциям;
контролирует доступ к исключениям, последовательностям и генераторам;
предоставить одну или несколько привилегий на выполнение DDL операций над основными объектами базы данных пользователям, ролям, представлениям, хранимым процедурам, триггерам, пакетам и функциям;
назначает привилегии на создание, удаление и изменение базы данных пользователям, ролям, представлениям, хранимым процедурам, триггерам, пакетам и функциям;
назначить указанные роли группе перечисленных пользователей;
назначить политику конкретному пользователю.
Подробно оператор описан в главе 27.
См. также операторы CREATE ROLE, DROP ROLE, REVOKE, CONNECT.
35.89. INSERT
Оператор INSERT добавляет строки в обычную таблицу или в таблицу изменяемого представления. Синтаксис оператора:
Листинг 35.85 Синтаксис оператора INSERT
INSERT INTO {<имя таблицы> | <имя представления>}
[OVERRIDE {SYSTEM | USER} VALUE]
{ DEFAULT VALUES | [(<список столбцов>)] <источник значений>}
[RETURNING { <список возвращаемых значений> | *} [INTO <переменные>]]
<источник значений> ::= VALUES (<значение>| DEFAULT [,<значение>| DEFAULT...])
| <поиск многих>
<список столбцов> ::= <имя столбца> [, <имя столбца> ...]
<список возвращаемых значений> ::= <имя столбца> [[AS] <алиас>] [, <имя столбца>
[[AS] <алиас>]...]
<переменные> ::= [:]<имя переменной> [, [:]<имя переменной> ...]
<значение> ::= <литерал>
| <выражение>
| <встроенная функция>
| <UDF> [(<параметр> [, <параметр> ...])]
| <обращение к хранимой процедуре> [(<параметр> [, <параметр>]...)]
| NEXT VALUE FOR <имя генератора>
| (<выбор одного>) }
Добавлять данные в таблицу может ее владелец, администратор базы данных, а также пользователь,
которому предоставлено право добавлять данные в таблицу (в таблицы, базовые для используемого
представления) оператором GRANT INSERT.
Оператор позволяет выполнить одно из следующих действий:
добавить строку, для которой указаны конкретные значения столбцов;
добавить строку, которая будет во всех столбцах содержать значения по умолчанию (предложение
DEFAULT VALUES).
Подробнее об операторе добавления см. в главе 12.
См. также операторы UPDATE, UPDATE OR INSERT, DELETE, SELECT, SET TRANSACTION, функции AVG, SUM, MIN, MAX, COUNT, CAST, GEN_ID, NEXT VALUE FOR.
35.90. MERGE
Оператор MERGE объединяет данные в таблицу или представление.
Листинг 35.86 Синтаксис оператора MERGE
MERGE INTO <имя таблицы | имя представления> [[AS] <алиас>]
USING <таблица|представление|хранимая процедура|производная таблица> [AS <алиас>]
ON <условие соединения>
<предложение WHEN> [<предложение WHEN> ...]
[PLAN <выражение для построения плана>]
[ORDER BY <выражение для упорядочивания выборки>]
[RETURNING <список возвращаемых выражений>|[{OLD. | NEW.}]*
[INTO <список переменных>]]
<предложение WHEN> ::= <предложение WHEN MATCHED>
| <предложение WHEN NOT MATCHED BY TARGET>
| <предложение WHEN NOT MATCHED BY SOURCE>
<предложение WHEN MATCHED> ::=
WHEN MATCHED [ AND <доп.условие> ]
THEN {UPDATE SET <список назначений> | DELETE}
<предложение WHEN NOT MATCHED BY TARGET> ::=
WHEN NOT MATCHED [ BY TARGET ] [ AND <доп.условие> ]
THEN INSERT [(<столбцы>)] VALUES (<значения>)
<предложение WHEN NOT MATCHED BY SOURCE> ::=
WHEN NOT MATCHED BY SOURCE [ AND <доп.условие> ]
THEN { UPDATE SET <список назначений> | DELETE }
<список назначений> ::= <имя столбца>={<значение>|DEFAULT} [, <имя столбца>= {<значение>|DEFAULT} ...]
<столбцы> ::= <имя столбца> [, <имя столбца> ...]
<значения> ::= { <значение> | DEFAULT} [, { <значение> | DEFAULT} ...]
<список возвращаемых выражений> ::= <выражение> [[AS] <псевдоним>] [, <выражение> [[AS] <псевдоним>] ...]
<список переменных> ::= [:] <имя переменной> [, [:] <имя переменной> ...]
Оператор MERGE производит слияние записей источника в целевую таблицу (или обновляемое представление).
Источником данных может быть таблица, представление, хранимая процедура или производная таблица, т.е.
заключенный в скобки оператор SELECT. Каждая запись источника используется для обновления (предложение
UPDATE) или удаления (предложение DELETE) одной или более записей цели, или вставки (предложение
INSERT) записи в целевую таблицу, или ни для того, ни для другого. Условие обычно содержит сравнение
столбцов в таблицах источника и цели.
Подробнее об операторе слияния см. в главе 12.
35.91. RECREATE EXCEPTION
Оператор создает новое пользовательское исключение, если оно отсутствует в базе данных, или пересоздает существующее. Синтаксис оператора:
Листинг 35.87 Синтаксис оператора RECREATE EXCEPTION
RECREATE EXCEPTION <имя исключения> '<текст сообщения>';
Имя исключения может содержать до 63 символов и должно быть уникальным среди всех имен исключений базы данных.
Текст сообщения — текст, выдаваемый в момент вызова исключения. Может содержать до 1021 символа.
Оператор нормально выполняется только если это исключение не используется в каком-либо триггере или хранимой процедуре.
См. также операторы ALTER EXCEPTION, DROP EXCEPTION, CREATE EXCEPTION, CREATE OR ALTER EXCEPTION, операторы PSQL WHEN-DO, EXCEPTION.
35.92. RECREATE FUNCTION
Оператор RECREATE FUNCTION позволяет создать новую хранимую функцию, если функция с тем же именем
отсутствует в базе данных, или пересоздать существующую в базе данных функцию. Если функция с этим именем
уже существует, то оператор попытается удалить её и создать новую функцию, при этом существующие привилегии
и зависимости не сохраняются. Синтаксис оператора:
Листинг 35.88 Синтаксис оператора создания новой или изменения существующей хранимой функции RECREATE FUNCTION
RECREATE FUNCTION <имя хранимой функции>
[(<входной параметр> [, <входной параметр> ...])]
RETURNS <тип> [COLLATE <сортировка>] [DETERMINISTIC]
[SQL SECURITY {DEFINER | INVOKER}]
{ EXTERNAL NAME '<внешний модуль>' ENGINE <имя движка> [AS <тело внешней функции>]}
|
{
{AS '<BLR код>'}
|
{AS
[<объявление> [<объявление> ...] ]
BEGIN
<блок операторов>
END }
}
Операция закончится неудачей при подтверждении транзакции, если функция имеет зависимости.
См. также операторы CREATE OR ALTER FUNCTION, CREATE FUNCTION, ALTER FUNCTION, DROP FUNCTION, DECLARE VARIABLE, DECLARE CURSOR, DECLARE FUNCTION, DECLARE PROCEDURE.
35.93. RECREATE PACKAGE
Оператор RECREATE PACKAGE создаёт новый или пересоздает существующий заголовок пакета. Синтаксис оператора:
Листинг 35.89 Синтаксис оператора RECREATE PACKAGE
RECREATE PACKAGE <имя пакета>
[SQL SECURITY {DEFINER | INVOKER}]
AS
BEGIN
[ <объявление процедуры> | <объявление функции> ...]
END
<объявление процедуры> ::=
PROCEDURE <имя процедуры> [(<входной параметр> [, <входной параметр> ...])]
[RETURNS (<выходной параметр> [, <выходной параметр> ...])]
<объявление функции> ::=
FUNCTION <имя функции> [(<входной параметр> [, <входной параметр> ...])]
RETURNS <тип> [COLLATE <сортировка>] [DETERMINISTIC]
Если заголовок пакета с таким именем уже существует, то оператор попытается удалить его и создать новый заголовок пакета. Пересоздать заголовок пакета невозможно, если у существующей заголовка пакета имеются зависимости или существует тело этого пакета. После пересоздания заголовка пакета привилегии на выполнение подпрограмм пакета и привилегии самого пакета не сохраняются.
См. также операторы RECREATE PACKAGE BODY, CREATE PACKAGE, DROP PACKAGE, ALTER PACKAGE, CREATE OR ALTER PACKAGE, CREATE PROCEDURE, CREATE FUNCTION.
35.94. RECREATE PACKAGE BODY
Оператор RECREATE PACKAGE BODY создаёт новое или пересоздает существующее тело пакета. Синтаксис оператора:
Листинг 35.90 Синтаксис оператора RECREATE PACKAGE BODY
RECREATE PACKAGE BODY <имя пакета>
AS
BEGIN
[ <объявление процедуры> | <объявление функции> ...]
[ <реализация процедуры> | <реализация функции> ...]
END
<объявление процедуры> ::=
PROCEDURE <имя процедуры> [(<входной параметр> [, <входной параметр> ...])]
[RETURNS (<выходной параметр> [, <выходной параметр> ...])]
<объявление функции> ::=
FUNCTION <имя функции> [(<входной параметр> [, <входной параметр> ...])]
RETURNS <тип> [COLLATE <сортировка>] [DETERMINISTIC]
<реализация процедуры> ::=
PROCEDURE <имя процедуры> [(<входной_параметр> [, <входной_параметр> ...])]
[RETURNS (<выходной параметр> [, <выходной параметр> ...])]
{EXTERNAL NAME '<внешний модуль>' ENGINE <имя движка> [AS <тело вн. проц.>]} |
{ AS
[<объявление> [<объявление> ...] ]
BEGIN
<блок операторов>
END }
<реализация функции> ::=
FUNCTION <имя функции> [(<входной_параметр> [, <входной_параметр> ...])]
RETURNS <тип> [COLLATE <сортировка>] [DETERMINISTIC]
{EXTERNAL NAME '<внешний модуль>' ENGINE <имя движка> [AS <тело вн. функ.>]} |
{ AS
[<объявление> [<объявление> ...] ]
BEGIN
<блок операторов>
END }
Если тело пакета с таким именем уже существует, то оператор попытается удалить его и создать новое тело пакета. После пересоздания тела пакета привилегии на выполнение подпрограмм пакета и привилегии самого пакета сохраняются.
См. также операторы RECREATE PACKAGE, CREATE PACKAGE BODY, DROP PACKAGE BODY, CREATE PROCEDURE, CREATE FUNCTION.
35.95. RECREATE PROCEDURE
Оператор RECREATE PROCEDURE создает новую или пересоздает существующую хранимую процедуру.
Если процедура с таким именем уже существует, то оператор попытается удалить ее и создать новую процедуру,
при этом привилегии на выполнение хранимой процедуры и привилегии самой хранимой процедуры не сохраняются.
Синтаксис оператора:
Листинг 35.91 Синтаксис оператора RECREATE PROCEDURE
RECREATE PROCEDURE <имя хранимой процедуры>
[AUTHID {OWNER | CALLER}]
[(<входной параметр> [, <входной параметр> ...])]
[RETURNS (<выходной параметр> [, <выходной параметр> ...])]
[SQL SECURITY {DEFINER | INVOKER}]
{ EXTERNAL NAME '<внешний модуль>' ENGINE <имя движка> [AS <тело внешней проц.>]} |
{
{AS '<BLR код>'}
|
{AS
[<объявление> [<объявление> ...] ]
BEGIN
<блок операторов>
END }
}
<входной параметр> ::= <описание параметра> [{=|DEFAULT} <значение по умолчанию>]
<выходной параметр> ::= <описание параметра>
<описание параметра> ::= <имя параметра> <тип> [NOT NULL] [COLLATE <порядок сортировки>]
<тип> ::= { <тип данных SQL>
| [TYPE OF] <имя домена>
| TYPE OF COLUMN <имя таблицы/представления>.<имя столбца> }
<значение по умолчанию>::= {<литерал> | NULL | <контекстная переменная>}
<внешний модуль> ::= '<имя внешнего модуля>!<имя функции в модуле>[! <информация>]'
<объявление> ::= <объявление локальной переменной>;
| <объявление курсора>;
| <объявление процедуры/функции>
| <реализация процедуры/функции>
Синтаксис и семантика оператора (за исключением названия оператора)
полностью соответствует оператору CREATE PROCEDURE.
Операция закончится неудачей при подтверждении транзакции, если процедура имеет зависимости.
См. также операторы CREATE OR ALTER PROCEDURE, CREATE PROCEDURE, ALTER PROCEDURE, DROP PROCEDURE, EXECUTE PROCEDURE, DECLARE VARIABLE, DECLARE CURSOR, DECLARE FUNCTION, DECLARE PROCEDURE.
35.96. RECREATE SEQUENCE
Последовательность можно пересоздать с помощью оператора RECREATE GENERATOR (SEQUENCE):
Листинг 35.92 Синтаксис оператора RECREATE GENERATOR /SEQUENCE
RECREATE {GENERATOR | SEQUENCE} <имя генератора>
[START WITH <начальное значение>] [INCREMENT [BY] <приращение>];
Если последовательность с таким именем уже существует, то оператор RECREATE SEQUENCE попытается удалить
её и создать новую последовательность. При наличии зависимостей для существующей последовательности
оператор RECREATE SEQUENCE не выполнится.
35.97. RECREATE TABLE
Таблица пересоздается оператором RECREATE TABLE.
Листинг 35.93 Синтаксис оператора создания таблицы RECREATE TABLE
RECREATE [GLOBAL TEMPORARY] TABLE <имя таблицы>
[EXTERNAL [FILE] '<спецификация файла>']
(<определение столбца> [, { <определение столбца> | <ограничение таблицы>}...])
[ON COMMIT {DELETE | PRESERVE} ROWS]
[SQL SECURITY {DEFINER | INVOKER}];
Этот оператор создаёт или пересоздает таблицу. Если таблица с таким именем
уже существует, то оператор RECREATE TABLE попытается удалить её и создать новую.
Оператор RECREATE TABLE не выполнится, если существующая таблица имеет зависимости.
Данная операция доступна и для глобальных временных таблиц (GTTs) с синтаксисом, аналогичным
оператору CREATE GLOBAL TEMPORARY TABLE.
См. также операторы CREATE TABLE, ALTER TABLE, DROP TABLE.
35.98. RECREATE TRIGGER
Оператор RECREATE TRIGGER создаёт новый триггер, если триггер с указанным именем не существует,
в противном случае оператор RECREATE TRIGGER попытается удалить его и создать новый. Синтаксис оператора:
Листинг 35.94 Синтаксис оператора RECREATE TRIGGER
RECREATE TRIGGER <имя триггера> {
<объявление табличного триггера>
| <объявление табличного триггера в стандарте SQL-2003>
| <объявление триггера базы данных>
| <объявление DDL триггера> }
[SQL SECURITY {DEFINER | INVOKER}]
{ EXTERNAL NAME '<внешний модуль>' ENGINE <имя движка> [AS <тело внеш. триг.>] } |
{
AS
[<объявление> [<объявление> ...] ]
BEGIN
<блок операторов>
END }
<объявление табличного триггера> ::=
FOR {<имя таблицы> | <имя представления>}
[ACTIVE | INACTIVE]
{BEFORE | AFTER} <список событий таблицы (представления)>
[POSITION <порядок срабатывания триггера>]
<объявление табличного триггера в стандарте SQL-2003> ::=
[ACTIVE | INACTIVE]
{BEFORE | AFTER} <список событий таблицы (представления)>
[POSITION <порядок срабатывания триггера>]
ON {<имя таблицы> | <имя представления>}
<объявление триггера базы данных> ::=
[ACTIVE | INACTIVE]
ON <событие соединения или транзакции>
[POSITION <порядок срабатывания триггера>]
<объявление DDL триггера> ::=
[ACTIVE | INACTIVE]
{BEFORE | AFTER} <список DDL событий>
[POSITION <порядок срабатывания триггера>]
<список событий таблицы (представления)> ::= <событие DML> [OR <событие DML>...]
<событие DML> ::= { INSERT | UPDATE | DELETE }
<событие соединения или транзакции> ::= {
CONNECT
| DISCONNECT
| TRANSACTION START
| TRANSACTION COMMIT
| TRANSACTION ROLLBACK }
<список DDL событий> ::= {
ANY DDL STATEMENT
| <DDL событие> [OR <DDL событие> ...] }
<DDL событие> ::=
CREATE|ALTER|DROP TABLE
| CREATE|ALTER|DROP PROCEDURE
| CREATE|ALTER|DROP FUNCTION
| CREATE|ALTER|DROP TRIGGER
| CREATE|ALTER|DROP EXCEPTION
| CREATE|ALTER|DROP VIEW
| CREATE|ALTER|DROP DOMAIN
| CREATE|ALTER|DROP ROLE
| CREATE|ALTER|DROP SEQUENCE
| CREATE|ALTER|DROP USER
| CREATE|ALTER|DROP INDEX
| CREATE|DROP COLLATION
| ALTER CHARACTER SET
| CREATE|ALTER|DROP PACKAGE
| CREATE|DROP PACKAGE BODY
| CREATE|ALTER|DROP MAPPING
<объявление> ::= <объявление локальной переменной>;
| <объявление курсора>;
| <объявление процедуры/функции>
| <реализация процедуры/функции>
Синтаксис и семантика оператора (за исключением названия оператора)
полностью соответствует оператору CREATE TRIGGER.
См. также операторы CREATE OR ALTER TRIGGER, CREATE TRIGGER, ALTER TRIGGER, DROP TRIGGER, DECLARE VARIABLE.
35.99. RECREATE USER
Оператор RECREATE USER создаёт нового или пересоздаёт существующего пользователя.
Листинг 35.95 Синтаксис оператора RECREATE USER
RECREATE USER <логин> PASSWORD '<пароль>'
[FIRSTNAME '<имя пользователя>']
[MIDDLENAME '<отчество пользователя>']
[LASTNAME '<фамилия пользователя>']
[ACTIVE | INACTIVE]
[TAGS (<атрибут>|DROP <имя атрибута> [, <атрибут>|DROP <имя атрибута>...] )]
[USING PLUGIN 'имя плагина']
[GRANT ADMIN ROLE];
<атрибут> ::= <имя атрибута> = 'строковое значение'
Если пользователь с таким именем уже существует, то оператор RECREATE USER удалит
его и создаст нового. Существующие привилегии при этом будут сохранены.
Примечание
Если предложение USING PLUGIN не указано, то при добавлении пользователя он сам добавляется
во все плагины из списка параметра DefaultUserManagers (в том числе атрибуты).
Семантика операторов и предложений в этом операторе полностью соответствует оператору CREATE USER.
См. также операторы CREATE USER, DROP USER.
35.100. RECREATE VIEW
Оператор RECREATE VIEW позволяет внести изменения в существующее представление.
Его синтаксис:
Листинг 35.96 Синтаксис оператора RECREATE VIEW
RECREATE VIEW <имя представления> [<список столбцов>]
AS <оператор SELECT>
[WITH CHECK OPTION]
<список столбцов> ::= (столбец [, столбец ...])
Представление может отсутствовать в базе данных. В этом случае оно просто создается заново. Если представление с этим именем уже существует в базе данных, то оно удаляется и затем создается заново. Попытка выполнить пересоздание представления приведет к ошибке базы данных, если это представление в настоящий момент находится в использовании.
Все предложения в этом операторе в точности соответствуют предложениям в
операторе CREATE VIEW.
См. также операторы CREATE VIEW, DROP VIEW, SELECT, INSERT, UPDATE, UPDATE OR INSERT, DELETE.
35.101. RELEASE SAVEPOINT
Оператор удаляет созданную ранее точку сохранения. Синтаксис:
Листинг 35.97 Синтаксис оператора RELEASE SAVEPOINT
RELEASE SAVEPOINT <имя точки сохранения> [ONLY];
Точка сохранения с указанным именем удаляется из списка точек
сохранения, созданных транзакцией. Если не задано ключевое слово ONLY,
то удаляются и все последующие точки сохранения. Если указано ключевое
слово ONLY, то удаляется из списка только заданная точка сохранения.
Если точки сохранения с указанным именем в списке не существует, то никакие действия не выполняются.
Подробно оператор описан в главе 6.
См. также операторы SET TRANSACTION, ROLLBACK, SAVEPOINT, COMMIT.
35.102. REVOKE
Оператор позволяет отменить привилегии для пользователей, ролей, хранимых процедур, хранимых функций,
пакетов, триггеров и представлений, которые были предоставлены оператором GRANT.
Синтаксис оператора REVOKE:
Листинг 35.98 Синтаксис оператора REVOKE
REVOKE [GRANT OPTION FOR] <табличные привилегии>
ON [TABLE] {<имя таблицы> | <имя представления>}
FROM <список обладателей привилегий>
[{GRANTED BY|AS} [USER] <имя грантора>]
REVOKE [GRANT OPTION FOR] EXECUTE ON {PROCEDURE | FUNCTION | PACKAGE} <имя процедуры/функции/пакета>
FROM <список обладателей привилегий>
[{GRANTED BY|AS} [USER] <имя грантора>]
REVOKE [GRANT OPTION FOR] USAGE ON {EXCEPTION <имя искл-я>| {GENERATOR | SEQUENCE} <имя генератора>}
FROM <список обладателей привилегий>
[{GRANTED BY|AS} [USER] <имя грантора>]
REVOKE [GRANT OPTION FOR] {ALL [PRIVILEGES] | {CREATE|ALTER ANY|DROP ANY} [, {CREATE|ALTER ANY|DROP ANY}...] } <объект>
FROM <список обладателей привилегий>
[{GRANTED BY|AS} [USER] <имя грантора>]
REVOKE CREATE DATABASE FROM <пользователь обладатель> {,<пользователь обладатель>}
REVOKE [GRANT OPTION FOR] {ALL [PRIVILEGES]|{ALTER|DROP}[,{ALTER|DROP}]} DATABASE
FROM <список обладателей привилегий>
[{GRANTED BY|AS} [USER] <имя грантора>]
REVOKE [ADMIN OPTION FOR] [DEFAULT] <имя роли> [, [DEFAULT] <имя роли> ...]
FROM [USER]|[ROLE] <имя польз-я/роли> [, [USER]|[ROLE] <имя польз-я/роли>...]
[{GRANTED BY|AS} [USER] <имя грантора>]
REVOKE ALL ON ALL FROM <список обладателей привилегий>
<табличные привилегии> ::= ALL [PRIVILEGES] | <привилегия> [, <привилегия>...]
<привилегия> ::= SELECT [(<имя столбца [, <имя столбца>...]>)]
| DELETE
| INSERT
| UPDATE [(<имя столбца [, <имя столбца>...]>)]
| REFERENCES [(<имя столбца [, <имя столбца>...]>)] }
<объект> ::= TABLE
| TABLESPACE
| VIEW
| PROCEDURE
| FUNCTION
| PACKAGE
| GENERATOR
| SEQUENCE
| DOMAIN
| EXCEPTION
| ROLE
| CHARACTER SET
| COLLATION
| FILTER
| JOB
<список обладателей привилегий> ::={<объект обладатель>|<пользователь обладатель>}
[, {<объект обладатель>|<пользователь обладатель>}...]
<объект обладатель> ::= PROCEDURE <имя процедуры>
| FUNCTION <имя функции>
| PACKAGE <имя пакета>
| TRIGGER <имя триггера>
| VIEW <имя представления>
| SYSTEM PRIVILEGE <системная привилегия>
<пользователь обладатель> ::= [USER] <имя пользователя>
| [ROLE] <имя роли>
| GROUP <имя группы в Unix>
Только пользователь, который назначил привилегию, может удалить её.
Оператор позволяет выполнить одно из следующих действий:
отнять одну или несколько привилегий для таблиц и представлений у пользователей, ролей, хранимых процедур, хранимых функций, пакетов, триггеров и представлений;
отнять права на выполнение процедуры, функции или пакета у пользователей, ролей, хранимых процедур, хранимых функций, пакетов, триггеров и представлений;
отнять привилегии на контроль доступа к исключениям, последовательностям и генераторам;
отнять одну или несколько привилегий на выполнение DDL операций над основными объектами базы данных у пользователей, ролей, хранимых процедур, хранимых функций, пакетов, триггеров и представлений;
отнять привилегии на создание, удаление и изменение базы данных у пользователей, ролей, хранимых процедур, хранимых функций, пакетов, триггеров и представлений;
отменить назначенные оператором
GRANTроли;отменить все привелегии на всех объектах у пользователей.
Подробное описание оператора см. в главе 27.
См. также операторы CREATE ROLE, DROP ROLE, GRANT, CONNECT.
35.103. ROLLBACK
Оператор позволяет выполнить отмену всех действий, выполненных в контексте данной транзакции, или
откат на ранее созданную в транзакции контрольную точку, точку сохранения (в случае использования
вложенных транзакций), если задано необязательное предложение TO SAVEPOINT. Синтаксис оператора:
Листинг 35.99 Синтаксис оператора ROLLBACK
ROLLBACK [WORK] [TRANSACTION <имя транзакции>]
[RETAIN [SNAPSHOT] | TO SAVEPOINT <имя точки сохранения>] [RELEASE];
Подробно оператор, работа с транзакциями, использование вложенных транзакций описаны в главе 6.
См. также операторы SET TRANSACTION, COMMIT, SAVEPOINT, RELEASE SAVEPOINT.
35.104. SAVEPOINT
Оператор создает очередную точку сохранения для транзакции, на которую в дальнейшем возможен возврат в процессе выполнения действий в контексте данной транзакции. Синтаксис оператора:
Листинг 35.100 Синтаксис оператора создания точки сохранения SAVEPOINT
SAVEPOINT <имя точки сохранения>;
Имя точки сохранения — идентификатор базы данных, который может содержать до 63 символов. Имена точек сохранения в контексте одной транзакции должны отличаться. Если же в операторе создается точка сохранения с именем, уже присутствующем в списке созданных точек сохранения в процессе активности данной транзакции, то новое состояние базы данных заменяет старую точку сохранения, все последующие точки удаляются.
Подробно оператор, работа с транзакциями, использование вложенных транзакций описаны в главе 6.
См. также операторы SET TRANSACTION, ROLLBACK, COMMIT, RELEASE SAVEPOINT.
35.105. SELECT
Оператор SELECT дает возможность осуществлять довольно сложную выборку данных из одной или более
таблиц базы данных. Он позволяет выполнять объединение (UNION) и соединение (JOIN) данных из
различных таблиц. Синтаксис оператора SELECT:
Листинг 35.101 Синтаксис оператора SELECT
[WITH [RECURSIVE] <CTE> [, <CTE> ...]]
SELECT
[FIRST <значение>] [SKIP <значение>]
[DISTINCT | ALL]
<выходное поле> [, <выходное поле>]
FROM
<источники>
[<соединения (joins)>]
[WHERE <условие выборки>]
[GROUP BY <условие группирование выбранных данных>
[HAVING <условие выборки>]]
[WINDOW <спецификация окна> [, <спецификация окна>] ...]
[UNION [DISTINCT | ALL] <другой набор данных>]
[PLAN <выражение для плана поиска>]
[ORDER BY <выражение для порядка выборки>]
[OPTIMIZE FOR {FIRST | ALL} ROWS]
[ ROWS <m> [TO <n>]
| [OFFSET <n> {ROW | ROWS}] [FETCH {FIRST | NEXT} [<m>] {ROW | ROWS} ONLY] ]
[FOR UPDATE [OF <имя столбца> [, <имя столбца>]...]]
[WITH LOCK [SKIP LOCKED]]
[INTO [:]<переменная> [,[:]<переменная> ... ]]
Предложение
WITHпозволяет задать общее табличное выражение (CTE, Common Table Expression). Оно может быть рекурсивным (ключевое словоRECURSIVE) и обычным, не рекурсивным (значение по умолчанию).Предложения
FIRSTиSKIPограничивают результирующий набор данных указанным числом записей.Ключевое слово
DISTINCTуказывает, что в выходной набор данных не помещаются дубликаты строк.Предложение
FROMсодержит список таблиц, из которых осуществляется выбор данных.Необязательное предложение
WHEREзадает условия выборки данных — условия, которым должны удовлетворять строки исходной таблицы (исходных таблиц), для того, чтобы они попали в результирующий набор данных.Предложения
GROUP BYиHAVINGпозволяют сгруппировать выбранные данные, если в списке выбора присутствуют агрегатные функции.Предложение
UNIONдает возможность объединить в выходном наборе данных несколько таблиц с одинаковой структурой.В предложении
PLANможно задать свой план для выполнения запроса, который позволит ускорить процесс выбора данных.Предложение
ORDER BYзадает упорядоченность выходного набора данных. Здесь также можно указать количество строк, которое должно быть помещено в результирующий набор данных (предложенияROWS, OFFSET, FETCH).Предложение
OPTIMIZE FORпозволяет задать необходимую стратегию оптимизации запросов для ускорения процесса выборки данных.Предложение
WITH LOCKзапрещает параллельным процессам, транзакциям выполнять какие-либо изменения в данной таблице запроса. Подробности см. в главе 6.Предложение
SKIP LOCKEDпозволяет пропускать записи, заблокированные другими транзакциями, вместо того чтобы ждать их разблокирования или выдавать ошибку конфликта обновления.С помощью предложения
INTOв PSQL (хранимых процедурах, триггерах и др.) результаты выборки командыSELECTмогут быть построчно загружены в локальные переменные (число, порядок и типы локальных переменных должны соответствовать полямSELECT).
Подробно об операторе SELECT и примеры использования см. в разделе 12.1.
См. также операторы INSERT, DELETE, UPDATE, UPDATE OR INSERT, SET TRANSACTION, EXECUTE PROCEDURE.
Предложение OPTIMIZE FOR
Предложение OPTIMIZE FOR позволяет задать необходимую стратегию оптимизации запросов, тем самым ускорить
процесс выборки данных. Синтаксис предложения:
[OPTIMIZE FOR {FIRST | ALL} ROWS]
FIRST- для запросов выбирается такой план доступа, который позволяет максимально быстро получить первые записи в выборке;ALL- для запросов выбирается такой план доступа, который позволяет максимально быстро получить все записи в выборке.
В отсутсвии предложения OPTIMIZE FOR при выполнении оператора SELECT будет использоваться стратегия
оптимизации запросов, указанная в параметре конфигурационного файла OptimizationStrategy.
Значением по умолчанию является default. Если при умолчательном значении параметра OptimizationStrategy
в запросе присутствуют ключевые слова FIRST и/или SKIP или же предложение ROWS, то будет использована
стратегия оптимизации FIRST ROWS, несмотря на настройки файла конфигурации. Если же в конфигурационном файле
указана стратегия ALL ROWS, то данные предложения не будут влиять на оптимизацию запросов.
При стратегии ALL ROWS всегда применяется явный выбор данных и их сортировка.
35.106. SET BIND
Оператор SET BIND настраивает правила приведения к типу данных для текущего сеанса. Этот оператор позволяет
заменять один тип данных другим при выполнении клиент-серверных взаимодействий.
Листинг 35.102 Синтаксис оператора SET BIND
SET BIND OF <заменяемый тип> TO <итоговый тип>
<заменяемый тип> ::= <scalar_datatype>
| <blob_datatype>
| TIME ZONE
| VARCHAR | {CHARACTER | CHAR} VARYING
<итоговый тип> ::= <scalar_datatype>
| <blob_datatype>
| VARCHAR | {CHARACTER | CHAR} VARYING
| LEGACY | NATIVE | EXTENDED
| EXTENDED TIME WITH TIME ZONE
| EXTENDED TIMESTAMP WITH TIME ZONE
Если используется неполное определение типа (например, CHAR вместо CHAR(n)) в типе данных,
который нужно заменить, то принудительное преобразование выполняется для всех столбцов CHAR.
Специальный неполный тип TIME ZONE обозначает TIME WITH TIME ZONE и TIMESTAMP WITH TIME ZONE.
Если в типе данных, к которому нужно преобразовать, используется неполное определение типа, сервер
автоматически определяет недостающие сведения об этом типе на основе исходного столбца.
Изменение привязки типа данных NUMERIC или DECIMAL не влияет на базовый целочисленный тип.
Напротив, изменение привязки целочисленного типа данных также влияет на соответствующие NUMERIC
или DECIMAL (например, SET BIND OF INT128 TO DOUBLE PRECISION также будет преобразовывать
NUMERIC и DECIMAL с точностью более 19, поскольку они используют INT128 в качестве базового типа).
Специальный тип LEGACY используется, когда тип данных, отсутствующий в предыдущей версии СУБД,
должен быть представлен способом, понятным для устаревшего клиентского программного обеспечения
(возможно, с некоторой потерей данных). Правила приведения, применяемые в этом случае, описаны в таблице ниже.
NATIVE |
LEGACY |
|---|---|
BOOLEAN |
CHAR(5) |
DECFLOAT |
DOUBLE PRECISION |
INT128 |
BIGINT |
TIME WITH TIME ZONE |
TIME WITHOUT TIME ZONE |
TIMESTAMP WITH TIME ZONE |
TIMESTAMP WITHOUT TIME ZONE |
Установка преобразования к NATIVE сбрасывает существующее правило преобразования для этого типа
данных и он будет передаваться в исходном формате.
Выполнение ALTER SESSION RESET приведет к возвращению к правилам преобразования по умолчанию.
Пример работы оператора SET BIND:
-- native
SELECT CAST('123.45' AS DECFLOAT(16)) FROM RDB$DATABASE;
CAST
=======================
123.45
-- double
SET BIND OF DECFLOAT TO DOUBLE PRECISION;
SELECT CAST('123.45' AS DECFLOAT(16)) FROM RDB$DATABASE;
CAST
=======================
123.4500000000000
-- still double
SET BIND OF DECFLOAT(34) TO CHAR;
SELECT CAST('123.45' AS DECFLOAT(16)) FROM RDB$DATABASE;
CAST
=======================
123.4500000000000
-- text
SELECT CAST('123.45' AS DECFLOAT(34)) FROM RDB$DATABASE;
CAST
=======================
123.45
35.107. SET DECFLOAT BIND
Для того чтобы старые приложения умели работать с типом DECFLOAT можно настроить отображение
значений DECFLOAT на другие доступные типы данных с помощью оператора SET DECFLOAT BIND.
Листинг 35.103 Синтаксис оператора SET DECFLOAT BIND
SET DECFLOAT BIND <тип для привязки>
<тип для привязки> ::= NATIVE
| CHAR[ACTER]
| DOUBLE PRECISION
| BIGINT[, <точность>]
Допустимые типы для привязки:
NATIVE— используется IEEE754 двоичное представление. Идеальная поддержка для дальнейшей обработки, но с плохой точностьюCHAR[ACTER]— ASCII строка. Идеальная точность, но плохая поддержка для дальнейшей обработки.DOUBLE PRECISION— используется 8 байтное представление с плавающей точкой, тоже самое что и для полей типаDOUBLE PRECISION. Идеальная поддержка для дальнейшей обработки, но с плохой точностью.BIGINT— используется целое с указанным масштабом, тоже самое что полеNUMERIC(18, <точность>). Хорошая поддержка дальнейшей обработки и требуемая точность, но диапазон значений очень ограничен.
Примечание
Привязка к ASCII строке будет иметь тип CHAR(23) для DECFLOAT(16) и CHAR(42) для DECFLOAT(34).
Примечание
Строковое представление зависит от значения DECFLOAT: если оно является экспоненциальным,
а требования к точности позволяют отображать значение без использования научной записи,
используется полностью выписанный формат.
Примечание
Данный SQL оператор работает вне механизма управления транзакциями, изменения выполненные им вступаю в силу немедленно. Его использование разрешено в том числе и PSQL коде.
35.108. SET DECFLOAT ROUND
Оператор позволяет изменять режим округления для типа DECFLOAT для текущей сессии.
Листинг 35.104 Синтаксис оператора SET DECFLOAT ROUND
SET DECFLOAT ROUND <режим округления>
Поддерживаются следующие режимы округления совместимые со стандартом IEEE:
Режим округления |
Описание |
|---|---|
CEILING |
Округление сверху. Если все отбрасываемые цифры равны нулю или знак числа отрицателен, последняя неотбрасываемая цифра не меняется. В противном случае последняя неотбрасываемая цифра инкрементируется на единицу (округляется в большую сторону). |
UP |
Округление по направлению от нуля (усечение с приращением). Отбрасываемые значения игнорируются. |
HALF_UP |
Округление к ближайшему значению. Если результат равноудаленный, выполняется округление в большую сторону. Если отбрасываемые значения больше чем или равны половине (0,5) единицы в следующей левой позиции, последняя неотбрасываемая цифра инкрементируется на единицу (округляется в большую сторону). В противном случае отбрасываемые значения игнорируются. Этот режим выбран по умолчанию. |
HALF_EVEN |
Округление к ближайшему значению. Если результат равноудаленный, выполняется округление так, чтобы последняя цифра была четной. Если отбрасываемые значения больше половины (0,5) единицы в следующей левой позиции, последняя неотбрасываемая цифра инкрементируется на единицу (округляется в большую сторону). Если они меньше половины, результат не корректируется (то есть отбрасываемые знаки игнорируются). В противном случае, когда отбрасываемые значения точно равны половине, последняя неотбрасываемая цифра не меняется, если она является четной и инкрементируется на единицу (округляется в большую сторону) в противном случае (чтобы получить четную цифру). Этот режим округления называется также банковским округлением и дает ощущение справедливого округления. |
HALF_DOWN |
Округление к ближайшему значению. Если результат равноудаленный, выполняется округление в меньшую сторону. Если отбрасываемые значения больше чем или равны половине (0,5) единицы в следующей левой позиции, последняя неотбрасываемая цифра декрементируется на единицу (округляется в меньшую сторону). В противном случае отбрасываемые значения игнорируются. |
DOWN |
Округление по направлению к нулю (усечение). Отбрасываемые значения игнорируются. |
FLOOR |
Округление снизу. Если все отбрасываемые цифры равны нулю или знак положителен, последняя неотбрасываемая цифра не меняется. В противном случае (знак отрицателен) последняя неотбрасываемая цифра инкрементируется на единицу. |
REROUND |
Округление к большему значению, если округляется 0 или 5, в противном случае округление происходит к меньшему значению. |
35.109. SET DECFLOAT TRAPS TO
В процессе вычисления выражений могут возникнуть различные ситуации, которые могут вызвать исключение
или проигнорированы. Установить какие ситуации приведут к возбуждению исключения можно с помощью
оператора SET DECFLOAT TRAPS TO.
Листинг 35.105 Синтаксис оператора SET DECFLOAT TRAPS TO
SET DECFLOAT TRAPS TO <ситуация>[, <ситуация>...]
<ситуация> ::= Division_by_zero
| Inexact
| Invalid_operation
| Overflow
| Underflow
По умолчанию исключения генерируется для следующих ситуаций: Division_by_zero, Invalid_ operation, Overflow.
Примечание
Данный SQL оператор работает вне механизма управления транзакциями, изменения выполненные им вступаю в силу немедленно. Его использование разрешено в том числе и PSQL коде.
35.110. SET GENERATOR
Оператор позволяет задать новое значение для генератора. Синтаксис:
Листинг 35.106 Синтаксис оператора SET GENERATOR
SET GENERATOR <имя генератора> TO <значение>;
Существует оператор ALTER SEQUENCE, который позволяет выполнить те же действия. Использование
оператора ALTER SEQUENCE является более предпочтительным.
Оператор SET GENERATOR может выполнить владелец последовательности, администратор и пользователь с
привилегией ALTER ANY SEQUENCE (ALTER ANY GENERATOR).
Подробно оператор описан в главе 13.
См. также операторы CREATE GENERATOR, CREATE SEQUENCE, DROP GENERATOR, DROP SEQUENCE, ALTER SEQUENCE, функцию GEN_ID, конструкцию NEXT VALUE FOR.
35.111. SET NAMES
Оператор устанавливает набор символов для клиентской стороны соединения с базой данных. Синтаксис оператора:
Листинг 35.107 Синтаксис оператора SET NAMES
SET NAMES <набор символов>;
Оператор должен быть выполнен до выполнения оператора соединения с базой
данных CONNECT. Если оператор не выдавался, то для клиента будет
установлен набор символов NONE, что при дальнейшей работе с базой
данных (с символьными данными) может создать массу проблем.
Использование оператора позволяет серверу базы данных выполнять
трансляцию (преобразование) символьных данных между набором символов
базы данных и набором символов клиента.
Хорошей практикой является использование на клиенте того же набора
символов, что и набор символов по умолчанию для базы данных DEFAULT CHARACTER SET.
Список наборов символов представлен в 33.
См. также операторы CONNECT, CREATE DATABASE, SET SQL DIALECT.
35.112. SET ROLE
Согласно стандарту SQL-2008 оператор SET ROLE позволяет установить контекстной
переменной CURRENT_ROLE одну из назначенных ролей для пользователя CURRENT_USER или роль,
полученную в результате доверительной аутентификации (в этом случае оператор принимает вид SET TRUSTED ROLE).
Синтаксис оператора:
Листинг 35.108 Синтаксис оператора SET ROLE
SET ROLE <имя роли>;
См. также оператор SET TRUSTED ROLE.
35.113. SET SESSION IDLE TIMEOUT
Оператор позволяет устанавливать тайм-аут простоя соединения на уровне текущего соединения.
Листинг 35.109 Синтаксис оператора SET SESSION IDLE TIMEOUT
SET SESSION IDLE TIMEOUT <значение> [HOUR | MINUTE | SECOND]
В качестве параметра выступает значение тайм-аута простоя в указанных единицах измерения времени. Если единица измерения времени не указано, то по умолчанию значение тайм-аута измеряется в минутах.
Примечание
Данный SQL оператор работает вне механизма управления транзакциями и вступают в силу немедленно.
SET SESSION IDLE TIMEOUT 8 HOUR;
35.114. SET SQL DIALECT
Оператор задает диалект клиента для выполнения доступа к базе данных.
Листинг 35.110 Синтаксис оператора SET SQL DIALECT
SET SQL DIALECT {1 | 3};
Оператор должен быть выполнен до выполнения оператора соединения с базой
данных CONNECT. Значением диалекта должен быть именно тот диалект,
который был использован при создании базы данных, иначе будет выдано
диагностическое сообщение.
См. также операторы CONNECT, CREATE DATABASE, SET NAMES.
35.115. SET STATEMENT TIMEOUT
Оператор позволяет установить тайм-аут выполнения SQL операторов на уровне текущего соединения.
Листинг 35.111 Синтаксис оператора SET STATEMENT TIMEOUT
SET STATEMENT TIMEOUT <значение> [HOUR | MINUTE | SECOND | MILLISECOND]
В качестве параметра выступает значение тайм-аута выполнения SQL операторов в указанных единицах измерения времени. Если единица измерения времени не указано, то по умолчанию значение тайм-аута измеряется в секундах.
Примечание
Данный SQL оператор работает вне механизма управления транзакциями и вступают в силу немедленно.
SET STATEMENT TIMEOUT 3 MINUTE;
35.116. SET STATISTICS
Оператор позволяет улучшить селективность (избирательность) указанного индекса. Улучшенная селективность увеличивает скорость выборки и упорядочения данных, при которых используется данный индекс. Синтаксис оператора:
Листинг 35.112 Синтаксис оператора SET STATISTICS INDEX
SET STATISTICS INDEX <имя индекса>;
Улучшение селективности всех индексов базы данных можно также получить, выполнив резервное копирование и восстановление базы данных. См. документ «Руководство администратора».
Только владелец таблицы, для которой был создан индекс, администратор и пользователь с ролью
ALTER ANY TABLE имеют привилегии на использование SET STATISTICS INDEX.
Подробно оператор описан в главе 15.
См. также операторы CREATE INDEX, DROP INDEX, ALTER INDEX.
35.117. SET TIME ZONE
Оператор позволяет изменить часовой пояс сеанса (текущего подключения).
Листинг 35.113 Синтаксис оператора SET TIME ZONE
SET TIME ZONE {'<часовой пояс>' | LOCAL}
<часовой пояс> ::= <регион часового пояса>
| [+/-] <смещения часов относительно GMT> [: <смещения минут относительно GMT>]
Примечание
Данный SQL оператор работает вне механизма управления транзакциями и вступают в силу немедленно.
set time zone '-02:00';
set time zone 'America/Sao_Paulo';
set time zone local;
35.118. SET TIME ZONE BIND
Оператор изменяет привязку часового пояса сеанса для совместимости со старыми клиентами.
Листинг 35.114 Синтаксис оператора SET TIME ZONE BIND
SET TIME ZONE BIND { NATIVE | LEGACY }
Значение по умолчанию - NATIVE, что означает, что выражения TIME WITH TIME ZONE и
TIMESTAMP WITH TIME ZONE возвращаются с новыми типами данных для клиента.
Старые клиенты могут не понимать новые типы данных, поэтому можно определить привязку к LEGACY,
и выражения будут возвращены как TIME WITHOUT TIME ZONE и TIMESTAMP WITHOUT TIME ZONE с соответствующим преобразованием.
Конфигурация привязки применима также к входным параметрам.
35.119. SET TRANSACTION
Оператор запускает на выполнение транзакцию с указанным именем и с заданными характеристиками. Синтаксис оператора:
Листинг 35.115 Синтаксис оператора SET TRANSACTION
SET TRANSACTION
[NAME <имя транзакции>]
[READ WRITE | READ ONLY]
[WAIT [LOCK TIMEOUT <кол-во секунд>] | NO WAIT]
[[ISOLATION LEVEL] <уровень изоляции>]
[NO AUTO UNDO]
[IGNORE LIMBO]
[AUTO COMMIT]
[AUTO RELEASE TEMP BLOBID]
[RESERVING <список таблиц для резервирования> | USING <хендл БД> [,<хендл БД>]];
<уровень изоляции> ::=
SNAPSHOT [TABLE [STABILITY]]
| SNAPSHOT AT NUMBER <номер снимка транзакции>
| READ COMMITTED [{[NO] RECORD_VERSION | READ CONSISTENCY}]
<список таблиц для резервирования> ::=
<имя таблицы> [, <имя таблицы> ...]
[FOR [SHARED | PROTECTED] {READ | WRITE}]
[, <список таблиц для резервирования>] ...
Все предложения в операторе SET TRANSACTION являются необязательными.
Если в операторе не задано никакого предложения, то предполагается
запуск транзакции со значениями по умолчанию:
SET TRANSACTION
READ WRITE
WAIT
ISOLATION LEVEL SNAPSHOT;
Основными характеристиками любой транзакции являются: режим доступа к данным (READ WRITE, READ ONLY),
режим разрешения блокировок (WAIT, NO WAIT) с возможным дополнительным уточнением (LOCK TIMEOUT),
уровень изоляции (ISOLATION LEVEL) и средства резервирования или освобождения таблиц (предложение RESERVING).
Подробно оператор, работа с транзакциями, использование вложенных транзакций описаны в главе 6.
См. также операторы SAVEPOINT, ROLLBACK, COMMIT, RELEASE SAVEPOINT.
35.120. SET TRUSTED ROLE
Оператор SET TRUSTED ROLE включает доступ доверенной роли, при условии, что CURRENT_USER
получен с помощью доверительной аутентификации и роль доступна.
Листинг 35.116 Синтаксис оператора SET TRUSTED ROLE
SET TRUSTED ROLE;
Идея отдельной команды SET TRUSTED ROLE состоит в том, чтобы при подключении доверенного пользователя
не указывать никакой дополнительной информации о роли, SET TRUSTED ROLE делает доверенную роль
(если таковая существует) текущей ролью без дополнительной деятельности, связанной с установкой параметров DBP.
Доверенная роль это не специальный тип роли, ей может быть любая роль, созданная с помощью оператора
CREATE ROLE или предопределённая системная роль RDB$ADMIN. Она становится доверенной ролью
для подключения, когда подсистема отображения объектов безопасности (security objects mapping subsystem)
находит соответствие между результатом аутентификации, полученным от плагина и локальным или глобальным
отображением (mapping) для текущей базы данных. Роль даже может быть той, которая не предоставлена явно
этому доверенному пользователю.
Доверенная роль не назначается при подключении по умолчанию. Можно изменить это поведение, используя
соответствующий плагин аутентификации и команды CREATE/ALTER MAPPING.
См. также оператор SET ROLE.
35.121. SIMILAR TO
Оператор SIMILAR TO проверяет соответствие строки шаблону регулярного выражения SQL. Для успешного
выполнения шаблон должен соответствовать всей строке — соответствие подстроки не достаточно. Если один
из операндов имеет значение NULL, то и результат будет NULL. В противном случае результат
является TRUE или FALSE. Предикат может быть использован в любом контексте, который принимает
булевы (логические) выражения, такие как предложения WHERE, ограничения CHECK и PSQL-оператор IF().
Синтаксис оператора SIMILAR TO:
Листинг 35.117 Синтаксис оператора SIMILAR TO
<строка> [ NOT ] SIMILAR TO <регулярное выражение> [ESCAPE <символ
экранирования>]
<регулярное выражение> := <строковый элемент> [<квантификатор>] [['|'] <строковый элемент> [ <квантификатор>] ...]
<квантификатор> ::= ? | * | + | '{' m [,[n]] '}'
<строковый элемент> ::= { <экранированный символ> | <обычный символ>}
| %
| <класс символов>
| ( <регулярное выражение> )
<экранированный символ> ::= <символ экранирования> <специальный символ>
| <символ экранирования> <символ экранирования>
<специальный символ> ::= '[' | ']' | '(' | ')' | '|' | '^' | '-' | '+' | '*' | '%' | '_' | '?' | '{' | '}'
<обычный символ> ::= любой символ за исключением <специальный символ> и не эквивалентный <символ экранирования> (если задан)
<класс символов> ::= '_'
| '[' <элемент класса> ... ']'
| '[^' <не элемент класса> ... ']'
| '[' <элемент класса> ... '^' <не элемент класса> ... ']'
<элемент класса>, <не элемент класса> ::= {<экранированный символ>|<обычный символ>}
| <диапазон>
| <предопределенные классы>
<диапазон> ::= { <экранированный символ> | <обычный символ>} -
{ <экранированный символ> | <обычный символ>}
<предопределенные классы> ::= '[:'ALPHA':]' | '[:'UPPER':]' | '[:'LOWER':]'
| '[:'DIGIT':]' | '[:'ALNUM':]' | '[:'SPACE':]'
| '[:'WHITESPACE':]'
Подробно оператор с примерами описан в главе 3.
35.122. SUSPEND
Предупреждение
Начиная с версии РЕД Базы Данных 5.0.3 оператор недоступен.
Оператор SUSPEND позволяет заблокировать сеансы пользователей и ролей.
Листинг 35.118 Синтаксис оператора SUSPEND
SUSPEND { [USER <список пользователей>] | [ROLE <список ролей>] }
[DISCONNECT] | [PERMANENT];
<список пользователей> ::= '<имя пользователя 1>' [, '<имя пользователя 2>' ...]
<список ролей> ::= '<имя роли 1>' [, '<имя роли 2>' ...]
Заблокировать сеанс для списка пользователей или ролей может только SYSDBA, владелец базы данных, пользователь с ролью
RDB$ADMIN. Заблокировать собственный сеанс может любой пользователь.
Заблокированный пользователь будет получать ошибку "Connection suspended" на все запросы,
кроме повторного подключения к базе данных, отключения от базы данных или создания нового подключения к базе данных.
SUSPEND USER TEST_USER;
35.123. UPDATE
Оператор UPDATE используется для изменения значений столбцов существующих строк таблицы или
представления (таблиц, лежащих в основе представления). Синтаксис оператора:
Листинг 35.119 Синтаксис оператора UPDATE
UPDATE {<имя таблицы> | <имя представления>} [[AS] <псевдоним>]
SET <имя столбца> = <значение>|DEFAULT [,<имя столбца> = <значение>|DEFAULT...]
[WHERE { <условие поиска> | CURRENT OF <имя курсора>}]
[PLAN <план>]
[ORDER BY <упорядочиваемый элемент> [, <упорядочиваемый элемент> ... ]]
[ROWS <m> [TO <n>]]
[SKIP LOCKED]
[RETURNING { <возвращаемые значения> | [{OLD. | NEW.}]* }
[INTO [:]<имя переменной> [, [:]<имя переменной> ...]] ];
<значение> ::= { <литерал>
| <выражение>
| <встроенная функция>
| <UDF> [(<параметр> [, <параметр> ...])]
| NEXT VALUE FOR <имя генератора>
| (<выбор одного>) }
<упорядочиваемый элемент> ::=
{<имя столбца>|<псевдоним столбца>|<номер столбца>|<произвольное выражение>}
[COLLATE <порядок сортировки>]
[ASC[ENDING] | DESC[ENDING]]
[NULLS {FIRST | LAST}]
<возвращаемые значения> ::= <имя столбца> [[AS] <алиас>] [,<имя столбца> [[AS] <алиас>]]...
Изменять данные в таблице может ее владелец, пользователь SYSDBA,
пользователь операционной системы root (Linux), trusted user
(Windows), а также пользователь, которому предоставлено право изменять
отдельные (указанные в операторе) столбцы таблицы оператором GRANT
UPDATE — см. документ «Руководство администратора». Если в операторе
изменение ключевых столбцов (столбцов, входящих в состав первичного или
уникального ключа) таблицы влечет внесение изменений в строки дочерней
таблицы, то и к этой таблице пользователь должен иметь соответствующие
полномочия.
Предложение
SETзадает список выполняемых изменений: указывается имя изменяемого столбца и после знака равенства новое значение;Предложение
WHEREопределяет множество строк, к которым будет применяться операция изменения данных;Ключевое слово
PLANзадает план выборки данных:Предложение
ORDER BYзадает упорядочение результатов выборки:Предложение
SKIP LOCKEDпозволяет пропускать записи, заблокированные другими транзакциями, вместо того чтобы ждать их разблокирования или выдавать ошибку конфликта обновления;Необязательное предложение
RETURNINGуказывает, что оператор возвращает значения заданных столбцов изменяемой строки.
Подробнее об операторе изменения данных см. в главе 12.
См. также операторы INSERT, DELETE, UPDATE OR INSERT.
35.124. UPDATE OR INSERT
Оператор UPDATE OR INSERT позволяет изменить существующие данные или добавить новые, если в таблице нет строк,
соответствующих некоторому условию.
Синтаксис оператора:
Листинг 35.120 Синтаксис оператора UPDATE OR INSERT
UPDATE OR INSERT INTO
{<имя таблицы> | <имя представления>} [(<имя столбца> [, <имя столбца> ...] )]
VALUES (<значение> | DEFAULT [, <значение> | DEFAULT ...] )
[MATCHING (<имя столбца> [, <имя столбца>] ...)]
[RETURNING { <возвращаемые значения> | [{OLD. | NEW.}]* }
[INTO [:]<имя переменной> [, [:]<имя переменной> ...]] ];
<возвращаемые значения> ::= <имя столбца> [[AS] <алиас>] [, <имя столбца> [[AS] <алиас>]]...
Для выполнения оператора UPDATE OR INSERT пользователь должен иметь
полномочия и UPDATE, и INSERT к таблице (представлению).
Оператор позволяет изменить значения отдельных столбцов в существующей строке или нескольких строках, если найдено соответствие, или добавить одну новую строку, если соответствия не найдено. В случае добавления новой строки в операторе должны быть заданы значения всех столбцов, входящих в состав первичного ключа.
После ключевого слова
INTOпомещается имя таблицы или представления, к которому применяется оператор. В круглых скобках следует необязательный список имен столбцов таблицы (представления).Ключевое слово
VALUESявляется обязательным. После него в скобках следует список значений, присваиваемых соответствующим столбцам.Если не задано ключевое слово
MATCHING, то в списке столбцов должны присутствовать все столбцы, входящие в состав первичного ключа. Если в операторе указано ключевое словоMATCHINGи после него список имен столбцов, то поиск соответствующих строк осуществляется по этим столбцам.Предложение
RETURNINGвозвращает значения указанных столбцов измененной или добавленной строки.
Подробнее об операторе см. в главе 12.
См. также операторы INSERT, DELETE, UPDATE, конструкцию NEXT VALUE FOR.