SET TIME ZONE
Изменение часового пояса сеанса.
SET TIME ZONE { <time-zone-string> | LOCAL } <time-zone-string> ::= '<time-zone>' <time-zone> ::= <time-zone-region> | [+/-] <hour-displacement> [: <minute-displacement>]
Немедленно изменяет часовой пояс сеанса (текущего подключения).
Указание LOCAL вернет к начальному часовому поясу сеанса (либо по умолчанию, либо как указано в свойстве соединения isc_dpb_session_time_zone
).
Получить текущий часовой пояс сеанса можно с использованием функции RDB$GET_CONTEXT
с аргументами 'SYSTEM'
для пространства имён и 'SESSION_TIMEZONE'
в качестве имени переменной.
Note
|
Выполнение |
set time zone '-02:00';
select rdb$get_context('SYSTEM', 'SESSION_TIMEZONE') from rdb$database;
-- returns -02:00
set time zone 'America/Sao_Paulo';
select rdb$get_context('SYSTEM', 'SESSION_TIMEZONE') from rdb$database;
-- returns America/Sao_Paulo
set time zone local;
ALTER SESSION RESET
Сброс сессионного окружения.
DSQL
ALTER SESSION RESET
Сбрасывает сеансовое окружение (подключения) к исходному состоянию.Эта функциональность полезна если сеанс используется повторно, вместо того чтобы производить отключение/подключение.
Данный оператор делает следующее:
генерируется ошибка (isc_ses_reset_err
), если в текущем соединении существует какая-либо открытая транзакция, кроме текущей транзакции и подготовленных транзакций 2PC, которые разрешены и игнорируются этой проверкой;
системная переменная RESETTING
устанавливается в TRUE
;
запускаются триггеры базы данных на событие ON DISCONNECT
, если они присутствуют и разрешены для текущего соединения;
текущая пользовательская транзакция откатывается (ROLLBACK
), если она есть. Если в текущей активной транзакции были произведены изменения, то будет выдано предупреждение;
сбрасывает установленные параметры DECFLOAT
(BIND
, TRAP
и ROUND
) в значения по умолчанию;
сбрасывает тайм-ауты сессии и оператора в 0;
удаляет все контекстные переменные из пространства имён USER_SESSION
;
сбрасывает роль в значение переданное в DPB (указанное при подключении) и очищает кеш привилегий (если роль была изменена с помощью оператора SET ROLE);
очищает содержимое всех используемых глобальных таблиц уровня соединения (GLOBAL TEMPORARY TABLE … ON COMMIT PRESERVE ROWS
);
запускаются триггеры базы данных на событие ON CONNECT
, если они присутствуют и разрешены для текущего соединения;
начинает новую транзакцию с теми же свойствами, что и транзакция, которая была отменена (если транзакция присутствовала до сброса);
системная переменная RESETTING
устанавливается в FALSE
.
Ошибка, возникшая в триггере ON DISCONNECT
, прерывает сброс сеанса и оставляет состояние сеанса неизменным.Такие ошибки сообщаются с кодом основной ошибки isc_session_reset_err
и текстом ошибки“Cannot reset user session”.
Ошибки, возникающие после того, как триггеры ON DISCONNECT
выполнены, прерывают выполнение оператора сброса сеанса и само соединение.Такие ошибки сообщались с кодом основной ошибки isc_session_reset_failed
и текстом ошибки“Reset of user session failed. Connection is shut down”.Последующие операции по подключению (кроме отсоединения) завершатся ошибкой isc_att_shutdown
.