FirebirdSQL logo

MAKE_DBKEY()

Доступно в

DSQL, PSQL

Синтаксис
MAKE_DBKEY (<relation>, recnum [, dpnum [, ppnum]]})

<relation> ::= rel_name | rel_id
Table 1. Параметры функции MAKE_DBKEY
Параметр Описание

rel_name

Имя таблицы.

rel_id

Идентификатор таблицы.Можно найти в RDB$RELATIONS.RDB$RELATION_ID.

recnum

Номер записи.Либо абсолютный (если dpnum и ppnum отсутствуют), либо относительный (если dpnum присутствует)

dpnum

Номер страницы данных DP.Либо абсолютный (если ppnum отсутствует), либо относительный (если ppnum присутствует)

ppnum

Номер страницы указателей на данные PP.

Функция MAKE_DBKEY создаёт значение DBKEY, используя имя или идентификатор таблицы, номер записи и, необязательно, логический номер страницы данных и страницы указателя.

Note
Замечания
  1. Если первый аргумент (таблица) является строковым выражением или литералом, то он обрабатывается как имя таблицы, и Firebird ищет соответствующий идентификатор таблицы. Поиск чувствителен к регистру.

    В случае строкового литерала идентификатор таблицы оценивается во время подготовки.В случае выражения, идентификатор таблицы оценивается во время выполнения.

    Если таблица не может быть найдена, возникает ошибка isc_relnotdef.

  2. Если первый аргумент (таблица) является числовым выражением или литералом, то он обрабатывается как идентификатор таблицы и используется «как есть», без проверки существования таблицы.

    Если значение аргумента отрицательно или превышает максимально допустимый идентификатор таблицы (в настоящее время 65535), то возвращается NULL.

  3. Второй аргумент (recnum) представляет собой абсолютный номер записи в отношении (если следующие аргументы — dpnum и ppnum — отсутствуют) или номер записи относительно первой записи, указанной в следующих аргументах.

  4. Третий аргумент (dpnum) — это логический номер страницы данных (DP) в таблице (если следующий аргумент — ppnum — отсутствует) или номер страницы данных относительно первой страницы данных, адресованной заданным ppnum.

  5. Четвёртый аргумент (ppnum) — это логический номер страницы указателя (PP) в таблице.

  6. Все числа начинаются с нуля. Максимально допустимое значение для dpnum и ppnum составляет 232 (4294967296).

    Если указан параметр dpnum, значение recnum может быть отрицательным.

    Если dpnum отсутствует и recnum отрицательно, возвращается NULL.

    Если указан ppnum, то dpnum может быть отрицательным.

    Если ppnum отсутствует и dpnum отрицателен, возвращается NULL.

  7. Если какой-либо из указанных аргументов имеет значение NULL, результат также равен NULL.

  8. Первый аргумент (таблица) описывается как INTEGER, но может быть переопределен приложением как VARCHAR или CHAR.

    recnum, dpnum и ppnum описываются как BIGINT (64-разрядное целое число со знаком).

Примеры:
  1. Запрос выбирает запись, используя имя таблицы (имя таблицы в верхнем регистре)

    select * from rdb$relations where rdb$db_key = make_dbkey('RDB$RELATIONS', 0)
  2. Запрос выбирает запись, используя идентификатор таблицы

    select * from rdb$relations where rdb$db_key = make_dbkey(6, 0)
  3. Запрос выбирает все записи, которые физически находятся на первой странице данных в таблице

    select * from rdb$relations
    where rdb$db_key >= make_dbkey(6, 0, 0)
      and rdb$db_key <  make_dbkey(6, 0, 1)
  4. Запрос выбирает все записи, которые физически находятся на первой странице данных 6-й страницы указателя в таблице

    select * from SOMETABLE
    where rdb$db_key >= make_dbkey('SOMETABLE', 0, 0, 5)
      and rdb$db_key <  make_dbkey('SOMETABLE', 0, 1, 5)

См. также: [fblangref-appx-supp-rdb-dbkey].

RDB$ERROR()

Доступно в

PSQL

Синтаксис
RDB$ERROR (<context>)

<context> ::= GDSCODE | SQLCODE | SQLSTATE | EXCEPTION | MESSAGE
Тип возвращаемого результата

Зависит от контекста

Возвращает значение контекста активного исключения.Тип возвращаемого значения зависит от контекста.

Note

Функция RDB$ERROR всегда возвращает NULL вне блока обработки ошибок WHEN …​ DO.

Доступные контексты в качестве аргумента функции RDB$ERROR:

EXCEPTION

функция возвращает имя исключения, если активно исключение определённое пользователем, или NULL если активно одно из системных исключений.Для контекста EXCEPTION тип возвращаемого значения: VARCHAR(63) CHARACTER SET UTF8.

MESSAGE

функция возвращает интерпретированный текст активного исключения.Для контекста MESSAGE тип возвращаемого значения: VARCHAR(1024) CHARACTER SET UTF8.

GDSCODE

функция возвращает значение контекстной переменной GDSCODE.

SQLCODE

функция возвращает значение контекстной переменной SQLCODE.

SQLSTATE

функция возвращает значение контекстной переменной SQLSTATE.

Example 1. Использование функции RDB$ERROR для сохранения текста ошибки в журнал
...
BEGIN
...
WHEN ANY DO
  EXECUTE PROCEDURE P_LOG_EXCEPTION(RDB$ERROR(MESSAGE));
END
...