RDB$SET_CONTEXT()
DSQL, PSQL
RDB$SET_CONTEXT('<namespace>', 'varname', {<value> | NULL}) <namespace> ::= USER_SESSION | USER_TRANSACTION
Параметр | Описание |
---|---|
namespace |
Пространство имён. |
varname |
Имя переменной.Зависит от регистра.Максимальная длина 80 байт. |
value |
Данные любого типа при условии, что их можно привести к типу VARCHAR(255) CHARACTER SET NONE. |
INTEGER
Функция RDB$SET_CONTEXT
создаёт, устанавливает значение или обнуляет переменную в одном из используемых пользователем пространстве имён: USER_SESSION
или USER_TRANSACTION
.
Функция возвращает 1, если переменная уже существовала до вызова и 0, если не существовала.Для удаления переменной надо установить её значение в NULL
.Если данное пространство имён не существует, то функция вернёт ошибку.Пространство имён и имя переменной зависят от регистра, должны быть не пустыми строками, и заключены в кавычки.
Note
|
|
RDB$SET_CONTEXT
SELECT RDB$SET_CONTEXT ('USER_SESSION', 'DEBUGL', 3)
FROM RDB$DATABASE;
-- в PSQL доступен такой синтаксис
RDB$SET_CONTEXT('USER_SESSION', 'RECORDSFOUND', RECCOUNTER);
SELECT RDB$SET_CONTEXT ('USER_TRANSACTION', 'SAVEPOINTS', 'YES')
FROM RDB$DATABASE;
SET TERM ^;
CREATE PROCEDURE set_context(User_ID VARCHAR(40),
Trn_ID INT) AS
BEGIN
RDB$SET_CONTEXT('USER_TRANSACTION', 'Trn_ID', Trn_ID);
RDB$SET_CONTEXT('USER_TRANSACTION', 'User_ID', User_ID);
END^
SET TERM ;^
CREATE TABLE journal (
jrn_id INTEGER NOT NULL PRIMARY KEY,
jrn_lastuser VARCHAR(40),
jrn_lastaddr VARCHAR(255),
jrn_lasttran INTEGER
);
SET TERM ^;
CREATE TRIGGER UI_JOURNAL
FOR JOURNAL BEFORE INSERT OR UPDATE
AS
BEGIN
new.jrn_lastuser = RDB$GET_CONTEXT('USER_TRANSACTION',
'User_ID');
new.jrn_lastaddr = RDB$GET_CONTEXT('SYSTEM',
'CLIENT_ADDRESS');
new.jrn_lasttran = RDB$GET_CONTEXT('USER_TRANSACTION',
'Trn_ID');
END^
SET TERM ;^
EXECUTE PROCEDURE set_context('skidder', 1);
INSERT INTO journal(jrn_id) VALUES(0);
COMMIT;