- при добавлении и изменении строк (INSERT- и UPDATE-запросы DML). Например, для созданного генератора Executor_ID получение очередного
значения и присвоение его локальной переменной Executor_Number (в теле триггера или хранимой процедуры) имеют следующий вид: Executor_Number = GEN_ID(Executor_ID, 1);. Функции получения значения генератора могут использоваться в списке возвращаемых элементов запроса SELECT. В таком случае в предложении FROM запроса SELECT указывается системная таблица Firebird RDB$DATABASE, которая всегда содержит только одну строку со служебной информацией о базе данных. Данная таблица используется для запросов, которые возвращают одно вычисляемое значение или контекстную переменную [18].
Например, для получения текущего значения генератора Executor_ID в списке возвращаемых элементов запроса SELECTможно использовать следующий запрос:
SELECT GEN_ID (Executor_ID,0) FROM RDB$DATABASE;.
Результат выполнения этого запроса представлен на рис. 6.1.
GENID
5
Рис. 6.1. Результат получения текущего значения генератора
Для получения следующего значения созданного генератора Executor_ID с помощью функции NEXT VALUE FOR нужно выполнить следующий запрос: SELECT NEXT VALUE FOR Executor_ID FROM RDB$DATABASE;.
В результате выполнения этого запроса будет выдано значение, равное 6.
Примером использования генератора последовательности в DML-запросе на вставку строки может служить следующий запрос: INSERT INTO Executor VALUES (NEXT VALUE FOR Executor_ID, 'Иванов А.А.');.
Следует отметить, что вызов функции вида
GEN_ID (<имя_генератора>, 0)
никогда не должен использоваться в запросах DML на добавление или изменение данных.
Созданный и неиспользуемый генератор можно удалить путем выполнения следующего запроса:
предыдущаяследующая