FirebirdSQL logo

RDB$GET_CONTEXT()

Доступно в

DSQL, PSQL

Синтаксис
RDB$GET_CONTEXT('<namespace>', 'varname')

<namespace> ::= SYSTEM | DDL_TRIGGER | USER_SESSION | USER_TRANSACTION
Table 1. Параметры функции RDB$GET_CONTEXT
Параметр Описание

namespace

Пространство имён.

varname

Имя переменной.Зависит от регистра.Максимальная длина 80 байт.

Тип возвращаемого результата:

VARCHAR(255) CHARACTER SET NONE

Функция RDB$GET_CONTEXT возвращает значение контекстной переменной из одного из пространства имён.

В настоящий момент существуют следующие пространства имён:

  • SYSTEM — предоставляет доступ к системным контекстным переменным. Эти переменные доступны только для чтения;

  • USER_SESSION — предоставляет доступ к пользовательским контекстным переменным, заданным через функцию RDB$SET_CONTEXT. Переменные существуют в течение подключения;

  • USER_TRANSACTION — предоставляет доступ к пользовательским контекстным переменным, заданным через функцию RDB$SET_CONTEXT. Переменные существуют в течение транзакции;

  • DDL_TRIGGER — предоставляет доступ к системным контекстным переменным, доступным только во время выполнения DDL триггера. Эти переменные доступны только для чтения.

Пространства имён USER_SESSION и USER_TRANSACTION — изначально пусты и пользователь сам создаёт переменные и наполняет их при помощи функции RDB$SET_CONTEXT.

Note

Для предотвращения DoS атак, существует ограничение на 1000 переменных в одном “пространстве имён”.

Если запрашиваемая функцией переменная существует в указанном пространстве имён, то будет возвращено её значение в виде строки VARCHAR(255) CHARACTER SET NONE.При обращении к несуществующей переменной в пространстве SYSTEM возникает ошибка, если такое происходит с пространствами имён USER_SESSION или USER_TRANSACTION — функция возвращает NULL.

Пространство имён SYSTEM

Переменные пространства имён SYSTEM
CLIENT_ADDRESS

Адрес клиента. Для TCP – IP адрес, для XNET – локальный ID процесса. Дляостальных случаев NULL.

CLIENT_HOST

Имя хоста сетевого протокола удаленного клиента. Значениевозвращается для всех поддерживаемых протоколов.

CLIENT_OS_USER

Имя пользователя операционной системы на клиентском компьютере.

CLIENT_PID

PID процесса на клиентском компьютере.

CLIENT_PROCESS

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

CLIENT_VERSION

Версия клиентской библиотеки (fbclient), используемой клиентским приложением.

CURRENT_ROLE

Глобальная переменная CURRENT_ROLE.

CURRENT_USER

Глобальная переменная CURRENT_USER.

DB_NAME

Каноническое имя текущей базы данных. Это либо имя псевдонима(если соединение с помощью имён файлов запрещено DatabaseAccess = NONE) или,в противном случае, полностью расширенное имя файла базы данных.

DB_FILE_ID

Уникальный идентификатор текущей базы данных на уровнефайловой системы.

DB_GUID

GUID базы данных.

EFFECTIVE_USER

Эффективный пользователь в текущий момент. Указываетпользователя с привилегиями которого в текущий момент временивыполняется процедура, функция или триггер.

ENGINE_VERSION

Версия сервера Firebird.

EXT_CONN_POOL_SIZE

Размер пула внешних соединений.

EXT_CONN_POOL_LIFETIME

Время жизни неактивных соединений в пуле внешнихсоединений.

EXT_CONN_POOL_IDLE_COUNT

Текущее количество неактивных соединений в пуле внешнихсоединений.

EXT_CONN_POOL_ACTIVE_COUNT

Текущее количество активных соединений в пуле внешнихсоединений.

GLOBAL_CN

Последнее значение текущего глобального счётчика Commit Number

ISOLATION_LEVEL

Уровень изоляции текущей транзакции — CURRENT_TRANSACTION.Значения: 'READ_COMMITED', 'SNAPSHOT' или 'CONSISTENCY'.

LOCK_TIMEOUT

Время ожидания транзакцией высвобождения ресурса приблокировке, в секундах.

NETWORK_PROTOCOL

Протокол, используемый для соединения с базой данных.Возможные значения: 'TCPv4', 'TCPv6', 'WNET', 'XNET', NULL.

PARALLEL_WORKERS

Максимальное количество параллельных рабочих процессов в текущем подключении.

READ_ONLY

Отображает, является ли транзакция, транзакцией только длячтения. 'FALSE' для Read-Write транзакций 'TRUE' для Read Only.

REPLICA_MODE

Режим репликации: пустая строка или NULL — первичная база данных,'READ-ONLY' — реплика в режиме только чтение, 'READ-WRITE' — реплика в режиме чтение и запись.

REPLICATION_SEQUENCE

Текущее значение последовательности репликации (номерпоследнего сегмента, записанного в журнал репликации).

SESSION_ID

Глобальная переменная CURRENT_CONNECTION.

SESSION_IDLE_TIMEOUT

Содержит текущее значение тайм-аут простоя соединения всекундах, который был установлен на уровне соединения, или ноль,если тайм-аут не был установлен.

SESSION_TIMEZONE

Текущий часовой пояс, установленный в текущей сессии.

SNAPSHOT_NUMBER

Номер моментального снимка базы данных: уровня транзакции(для транзакции SNAPSHOT или CONSISTENCY) или уровня запроса(для транзакции READ COMMITTED READ CONSISTENCY). NULL, еслимоментальный снимок не существует.

STATEMENT_TIMEOUT

Содержит текущее значение тайм-аута выполнения оператора вмиллисекундах, который был установлен на уровне подключения, илиноль, если тайм-аут не был установлен.

TRANSACTION_ID

Глобальная переменная CURRENT_TRANSACTION.

WIRE_COMPRESSED

Используется ли сжатие сетевого трафика. Если используетсясжатие сетевого трафика возвращает 'TRUE', если не используется — 'FALSE'. Для встроенных соединений — возвращает NULL.

WIRE_ENCRYPTED

Используется ли шифрование сетевого трафика. Еслииспользуется шифрование сетевого трафика возвращает 'TRUE', еслине используется — 'FALSE'. Для встроенных соединений — возвращает NULL.

WIRE_CRYPT_PLUGIN

Если используется шифрование сетевого трафика, то возвращаетимя текущего плагина шифрования, в противном случае NULL.

Пространство имён DDL_TRIGGER

Использование пространства имён DDL_TRIGGER допустимо, только во время работы DDL триггера.Его использование также допустимо в хранимых процедурах и функциях, вызванных триггерами DDL.

Контекст DDL_TRIGGER работает как стек.Перед возбуждением DDL триггера, значения, относящиеся к выполняемой команде, помещаются в этот стек.После завершения работы триггера значения выталкиваются.Таким образом в случае каскадных DDL операторов, когда каждая пользовательская DDL команда возбуждает DDL триггер, и этот триггер запускает другие DDL команды, с помощью EXECUTE STATEMENT, значения переменных в пространстве имён DDL_TRIGGER будут соответствовать команде, которая вызвала последний DDL триггер в стеке вызовов.

Переменные пространства имён DDL_TRIGGER
EVENT_TYPE

тип события (CREATE, ALTER, DROP).

OBJECT_TYPE

тип объекта (TABLE, VIEW и др.).

DDL_EVENT

(<ddl event item>), где <ddl_event_item> это EVENT_TYPE || ' ' || OBJECT_TYPE

OBJECT_NAME

имя объекта метаданных.

OLD_OBJECT_NAME

имя объекта метаданных до переименования.

NEW_OBJECT_NAME

имя объекта метаданных после переименования.

SQL_TEXT

текст SQL запроса.

Note

Ещё раз обратите внимание на то, что пространства имён и имена переменных регистрочувствительны, должны быть не пустыми строками, и заключены в кавычки!

Примеры

Example 1. Использование функции RDB$GET_CONTEXT
NEW.USER_ADR = RDB$GET_CONTEXT ('SYSTEM', 'CLIENT_ADDRESS');
См. также:

RDB$SET_CONTEXT.