CURRENT_CONNECTIONDSQL, PSQL
CURRENT_CONNECTION
BIGINT
Переменная CURRENT_CONNECTION хранит уникальный идентификатор текущего соединения.Значение переменной хранится в странице заголовка базы и сбрасывается после restore.Переменная увеличивается на единицу при каждом последующем соединении с базой данных (соединения также могут быть внутренними вызванными самим ядром). Следовательно, переменная показывает количество подключений произошедших к базе после её восстановления (или после её создания).
CURRENT_CONNECTIONSELECT CURRENT_CONNECTION FROM RDB$DATABASE
INSERTINGPSQL
INSERTING
BOOLEAN
Контекстная переменная INSERTING доступна только коде табличных триггеров.Используется в триггерах на несколько типов событий и показывает, что триггер сработал при выполнении операции INSERT.
INSERTING...
IF (INSERTING OR UPDATING) THEN
BEGIN
IF (NEW.SERIAL_NUM IS NULL) THEN
NEW.SERIAL_NUM = GEN_ID (GEN_SERIALS, 1);
END
...
LOCALTIMEDSQL, PSQL, ESQL
LOCALTIME [(<precision>)] <precision> ::= 0 | 1 | 2 | 3
| Параметр | Описание |
|---|---|
precision |
Точность.Значение по умолчанию 0.Не поддерживается в ESQL. |
TIME WITHOUT TIME ZONE
Переменная LOCALTIME возвращает текущее время в часовом поясе сессии, без информации о часовом поясе.Точность определяет, сколько учитывать знаков после запятой в долях секунды.Точность по умолчанию равна 0.
|
Note
|
В блоке кода PSQL (процедура, триггер, исполняемый блок) значение |
LOCALTIMESELECT LOCALTIME(2) FROM RDB$DATABASE;
-- результат будет (например) 23:35:33.1200
LOCALTIMESTAMPDSQL, PSQL, ESQL
LOCALTIMESTAMP [(<precision>)] <precision> ::= 0 | 1 | 2 | 3
| Параметр | Описание |
|---|---|
precision |
Точность.Значение по умолчанию 3.Не поддерживается в ESQL. |
TIMESTAMP WITHOUT TIME ZONE
Переменная LOCALTIMESTAMP возвращает текущую дату и время в часовом поясе сессии, без информации о часовом поясе.Точность определяет, сколько учитывать знаков после запятой в долях секунды.Точность по умолчанию равна 3.
|
Note
|
В блоке кода PSQL (процедура, триггер, исполняемый блок) значение |
LOCALTIMESTAMPSELECT LOCALTIMESTAMP(2) FROM RDB$DATABASE;
-- результат будет (например) 02.03.2014 23:35:33.1200
NEWPSQL
NEW
Контекстная переменная NEW доступна только в коде табличных триггеров.Значение NEW содержит новые значения полей данных, которое возникли в базе во время операции обновления или вставки.
В AFTER триггерах переменная доступна только для чтения.
|
Note
|
Для табличных триггеров, срабатывающих на несколько типов событий, переменная |
|
Important
|
Попытка записи в переменную |
NEW...
IF (NEW.SERIAL_NUM IS NULL) THEN
NEW.SERIAL_NUM = GEN_ID (GEN_SERIALS, 1);
...
OLDPSQL
OLD
Контекстная переменная OLD доступна только коде триггеров.Значения, содержащееся в OLD, хранит прошлые значения полей, которые были в базе до операции изменения или удаления.
Переменная OLD доступна только для чтения.
|
Note
|
Для табличных триггеров, срабатывающих на несколько типов событий, значения для переменной |
OLD...
IF (NEW.QUANTITY IS DISTINCT FROM OLD.QUANTITY) THEN
DELTA = NEW.QUANTITY - OLD.QUANTITY;
...
RESETTINGPSQL
RESETTING
BOOLEAN
Контекстная переменная RESETTING доступна только коде триггеров на события ON CONNECT и ON DISCONNECT, и может использоваться в любом месте, где можно использовать логический предикат.Системная переменная RESETTING, позволяет обнаружить случай, когда триггер базы данных срабатывает из-за сброса сеанса, например с помощью оператора ALTER SESSION RESET.Её значение TRUE, если выполняется сброс сеанса, и FALSE в противном случае.
RESETTING...
IF (RESETTING) THEN
BEGIN
-- выполняется сброс сеанса
END
...
ROW_COUNTPSQL
ROW_COUNT
BIGINT
Контекстная переменная ROW_COUNT содержит число строк, затронутых последним оператором DML(INSERT, UPDATE, DELETE, SELECT или FETCH) в текущем триггере, хранимой процедуре или исполняемом блоке.
Поведение с SELECT и FETCH:
После выполнения singleton SELECT запроса (запроса, который может вернуть не более одной строки данных),ROW_COUNT равна 1, если была получена строка данных и 0 в противном случае;
В цикле FOR SELECT переменная ROW_COUNT увеличивается на каждой итерации (начиная с 0 в качестве первого значения);
После выборки (FETCH) из курсора, ROW_COUNT равна 1, если была получена строка данных и 0 в противном случае. Выборка нескольких записей из одного курсора не увеличивает ROW_COUNT после 1.
|
Important
|
Переменная |
|
Warning
|
Не используйте переменную
В вышеприведённом примере в столбец
|
ROW_COUNT...
UPDATE Figures SET Number = 0 WHERE id = :id;
IF (row_count = 0) THEN
INSERT INTO Figures (id, Number)
VALUES (:id, 0);
...
SQLCODEPSQL
SQLCODE
INTEGER
В блоках обработки ошибок WHEN … DO контекстная переменная SQLCODE содержит текущий код ошибки SQL.До Firebird 2.0 значение SQLCODE можно было получить только в блоках обработки ошибок WHEN SQLCODE и WHEN ANY.Теперь она может быть отлична от нуля в блоках WHEN GDSCODE и WHEN EXCEPTION при условии, что ошибка, вызвавшее срабатывание блока, соответствует коду ошибки SQL.Вне обработчиков ошибок SQLCODE всегда равен 0, а вне PSQL не существует вообще.
SQLCODE...
WHEN ANY DO
BEGIN
IF (SQLCODE <> 0) THEN
MSG = 'Обнаружена ошибка SQL!';
ELSE
MSG = 'Ошибки нет!';
EXCEPTION EX_CUSTOM MSG;
END
...
SQLSTATEPSQL
SQLSTATE
CHAR(5)
В блоках обработки ошибок WHEN … DO контекстная переменная SQLSTATE переменная содержит 5 символов SQL-2003 — совместимого кода состояния, переданного оператором, вызвавшим ошибку.Вне обработчиков ошибок SQLSTATE всегда равен '00000', а вне PSQL не существует вообще.
|
Note
|
|
SQLSTATEWHEN ANY DO
BEGIN
MSG = CASE SQLSTATE
WHEN '22003' THEN
'Число вышло за пределы диапазона!'
WHEN '22012' THEN
'Деление на ноль!'
WHEN '23000' THEN
'Нарушение ограничения целостности!'
ELSE 'Ошибок нет! SQLSTATE = ' || SQLSTATE;
END;
EXCEPTION EX_CUSTOM MSG;
END
UPDATINGPSQL
UPDATING
BOOLEAN
Контекстная переменная UPDATING доступна только коде табличных триггеров.Используется в триггерах на несколько типов событий и показывает, что триггер сработал при выполнении операции UPDATE.
UPDATING...
IF (INSERTING OR UPDATING) THEN
BEGIN
IF (NEW.SERIAL_NUM IS NULL) THEN
NEW.SERIAL_NUM = GEN_ID (GEN_SERIALS, 1);
END
...
CURRENT_DATEDSQL, PSQL, ESQL
CURRENT_DATE
DATE
Переменная CURRENT_DATE возвращает текущую дату сервера.
|
Note
|
В модуле PSQL (процедура, функция, триггер или исполняемый блок) значение |
CURRENT_DATEselect current_date from rdb$database
USERDSQL, PSQL
USER
VARCHAR(63)
Переменная USER содержит имя текущего подключенного пользователя базы данных.
USERNEW.ADDED_BY = USER;
CURRENT_ROLEDSQL, PSQL
CURRENT_ROLE
VARCHAR(63)
Контекстная переменная CURRENT_ROLE, содержащая имя роли, которая была указана при подключении к базе данных, илироль установленную с помощью оператора SET ROLE. В случае если произошло подключение без указания роли,и роль не была указана позже с помощью оператора SET ROLE, переменная принимает значение NONE.
CURRENT_ROLE всегда представляет допустимую роль или NONE. Если пользователь подключается с несуществующей ролью,ядро молча сбрасывает её на NONE, не возвращая ошибку.
|
Note
|
Контекстная переменная |
CURRENT_ROLESELECT CURRENT_ROLE FROM RDB$DATABASE
|
Note
|
Такое же значение можно будет получить и в результате выполнения запроса:
|
CURRENT_TIMEDSQL, PSQL, ESQL
CURRENT_TIME [(<precision>)] <precision> ::= 0 | 1 | 2 | 3
| Параметр | Описание |
|---|---|
precision |
Точность.Значение по умолчанию 0.Не поддерживается в ESQL. |
TIME WITH TIME ZONE
Переменная CURRENT_TIME возвращает текущее время в часовом поясе сессии, включая информацию о часовом поясе.Точность определяет, сколько учитывать знаков после запятой в долях секунды.По умолчанию точность равна 0.
|
Note
|
В блоке кода PSQL (процедура, триггер, исполняемый блок) значение |
CURRENT_TIMESELECT CURRENT_TIME(2) FROM RDB$DATABASE;
-- результат будет (например) 23:35:33.1200 Europe/Moscow
CURRENT_TIMESTAMPDSQL, PSQL, ESQL
CURRENT_TIMESTAMP [(<precision>)] <precision> ::= 0 | 1 | 2 | 3
| Параметр | Описание |
|---|---|
precision |
Точность.Значение по умолчанию 3.Не поддерживается в ESQL. |
TIMESTAMP WITH TIME ZONE
Переменная CURRENT_TIMESTAMP возвращает текущую дату и время в часовом поясе сессии, включая информацию о часовом поясе.Точность определяет, сколько учитывать знаков после запятой в долях секунды.Точность по умолчанию равна 3.
|
Note
|
В блоке кода PSQL (процедура, триггер, исполняемый блок) значение |
CURRENT_TIMESTAMPSELECT CURRENT_TIMESTAMP(2) FROM RDB$DATABASE;
-- результат будет (например) 02.03.2014 23:35:33.1200 Europe/Moscow
CURRENT_TRANSACTIONDSQL, PSQL
CURRENT_TRANSACTION
BIGINT
Переменная CURRENT_TRANSACTION содержит уникальный номер текущей транзакции.
Значение `CURRENT_TRANSACTION хранится в странице заголовка базы данных и сбрасывается в 0 после восстановления (или создания базы). Оно увеличивается при старте новой транзакции.
CURRENT_TRANSACTIONSELECT CURRENT_TRANSACTION FROM RDB$DATABASE;
NEW.TRANS_ID = CURRENT_TRANSACTION;
CURRENT_USERDSQL, PSQL
CURRENT_USER
VARCHAR(63)
Переменная CURRENT_USER содержит имя текущего подключенного пользователя базы данных.
CURRENT_USERNEW.ADDED_BY = CURRENT_USER;
DELETINGPSQL
DELETING
BOOLEAN
Контекстная переменная DELETING доступна только в коде табличных триггеров.Используется в триггерах на несколько типов событий и показывает, что триггер сработал при выполнении операции DELETE.
DELETING...
IF (DELETING) THEN
BEGIN
INSERT INTO REMOVED_CARS (
ID, MAKE, MODEL, REMOVED)
VALUES (
OLD.ID, OLD.MAKE, OLD.MODEL, CURRENT_TIMESTAMP);
END
...
GDSCODEPSQL
GDSCODE
INTEGER
В блоке обработки ошибок WHEN … DO контекстная переменная GDSCODE содержит числовое представление текущего кода ошибки Firebird.До версии Firebird 2.0 GDSCODE можно было получить только с использованием конструкции WHEN GDSCODE.Теперь эту контекстную переменную можно также использовать в блоках WHEN ANY, WHEN SQLCODE и WHEN EXCEPTION при условии, что код ошибки соответствует коду ошибки Firebird.Вне обработчика ошибок GDSCODE всегда равен 0.Вне PSQL GDSCODE не существует вообще.
GDSCODE...
WHEN GDSCODE GRANT_OBJ_NOTFOUND,
GDSCODE GRANT_FLD_NOTFOUND,
GDSCODE GRANT_NOPRIV,
GDSCODE GRANT_NOPRIV_ON_BASE
DO
BEGIN
EXECUTE PROCEDURE LOG_GRANT_ERROR(GDSCODE);
EXIT;
END
...
|
Note
|
Обратите внимание, пожалуйста: после, |