Генераторы

  • Часть 1
  • | 2
  • | 3
  • | 4

-   при добавлении и изменении строк (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 на добавление или изменение данных.

Созданный и неиспользуемый генератор можно удалить путем выполнения следующего запроса:

предыдущаяследующая