FirebirdSQL logo

SQLSTATE

Доступно в

PSQL

Синтаксис
SQLSTATE
Тип возвращаемого результата

CHAR(5)

В блоках обработки ошибок WHEN …​ DO контекстная переменная SQLSTATE переменная содержит 5 символов SQL-2003 — совместимого кода состояния, переданного оператором, вызвавшим ошибку.Вне обработчиков ошибок SQLSTATE всегда равен '00000', а вне PSQL не существует вообще.

Note
  • SQLSTATE предназначен для замены SQLCODE. Последняя, в настоящее время устарела и буден удалена будущих версиях Firebird;

  • Любой код SQLSTATE состоит из двух символов класса и трёх символов подкласса. Класс 00 (успешное выполнение), 01 (предупреждение) и 02 (нет данных) представляют собой условия завершения. Каждый код статуса вне этих классов является исключением. Поскольку классы 00, 01 и 02 не вызывают ошибку, они никогда не будут обнаруживаться в переменной SQLSTATE.

Example 1. Использование переменной SQLSTATE
WHEN ANY DO
BEGIN
  MSG = CASE SQLSTATE
          WHEN '22003' THEN
            'Число вышло за пределы диапазона!'
          WHEN '22012' THEN
            'Деление на ноль!'
          WHEN '23000' THEN
            'Нарушение ограничения целостности!'
          ELSE 'Ошибок нет! SQLSTATE = ' || SQLSTATE;
        END;
  EXCEPTION EX_CUSTOM MSG;
END

UPDATING

Доступно в

PSQL

Синтаксис
UPDATING
Тип возвращаемого результата

BOOLEAN

Контекстная переменная UPDATING доступна только коде табличных триггеров.Используется в триггерах на несколько типов событий и показывает, что триггер сработал при выполнении операции UPDATE.

Example 1. Использование переменной UPDATING
...
IF (INSERTING OR UPDATING) THEN
BEGIN
  IF (NEW.SERIAL_NUM IS NULL) THEN
    NEW.SERIAL_NUM = GEN_ID (GEN_SERIALS, 1);
END
...

CURRENT_DATE

Доступно в

DSQL, PSQL, ESQL

Синтаксис
CURRENT_DATE
Тип возвращаемого результата

DATE

Переменная CURRENT_DATE возвращает текущую дату сервера.

Note

В модуле PSQL (процедура, функция, триггер или исполняемый блок) значение CURRENT_DATE будет оставатьсяпостоянным при каждом чтении. Если несколько модулей вызывают или запускают друг друга, значение будет оставатьсяпостоянным на протяжении всего времени работы самого внешнего модуля. Если вам нужно прогрессирующее значение в PSQL(например, для измерения временных интервалов), используйте преобразование литерала 'TODAY' в дату или временную метку.

Example 1. Использование переменной CURRENT_DATE
select current_date from rdb$database

USER

Доступно в

DSQL, PSQL

Синтаксис
USER
Тип возвращаемого результата

VARCHAR(63)

Переменная USER содержит имя текущего подключенного пользователя базы данных.

Example 1. Использование переменной USER
NEW.ADDED_BY = USER;