powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle APEX [игнор отключен] [закрыт для гостей] / И снова сессии Oracle и сессии Apex
14 сообщений из 14, страница 1 из 1
И снова сессии Oracle и сессии Apex
    #39130527
alex_lip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем доброго времени суток.
В клиент-серверной части для понимания кто в данный момент работает в системе использовали глобальную временную таблицу, которая существует только на время текущей сессии Oracle
Код: sql
1.
2.
3.
4.
5.
6.
create global temporary table USER_GL_TEMP
(
  id   NUMBER not null,
  usid NUMBER default sys_context('USERENV', 'SID')
)
on commit preserve rows;


То есть пользователь заходит в систему - появляется запись. В случае дисконнекта - запись исчезает.
С Apex так не прокатило, так как там использование сессий Oracle не прокатывает.
Вопрос - как получить идентификатор пользователя(на стороне Oracle для использования в тригерах и пакетах), который работает в системе, если он зашел через Apex?
То есть нужен ID пользователя на время его работы в И-нет приложении. В случае закрытия И-нет приложения - ID должен исчезнуть.
...
Рейтинг: 0 / 0
И снова сессии Oracle и сессии Apex
    #39130540
irbis_al
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex_lipВсем доброго времени суток.
В клиент-серверной части для понимания кто в данный момент работает в системе использовали глобальную временную таблицу, которая существует только на время текущей сессии Oracle
Код: sql
1.
2.
3.
4.
5.
6.
create global temporary table USER_GL_TEMP
(
  id   NUMBER not null,
  usid NUMBER default sys_context('USERENV', 'SID')
)
on commit preserve rows;


То есть пользователь заходит в систему - появляется запись. В случае дисконнекта - запись исчезает.
С Apex так не прокатило, так как там использование сессий Oracle не прокатывает.
Вопрос - как получить идентификатор пользователя(на стороне Oracle для использования в тригерах и пакетах), который работает в системе, если он зашел через Apex?
То есть нужен ID пользователя на время его работы в И-нет приложении. В случае закрытия И-нет приложения - ID должен исчезнуть.

Temporary table использовать для апекса нельязя...Т.к используется пул подключений.
Менеджер пула выбирает свободное подключение(не занятое транзакцией или selectoм) и ораела работает с этой сессией.
Может случится так что транзакция на одной сессии из пула ,а уже результат изменений (select report) другой сессией.(и соответсвенно другим дескриптором оракла)
А temporary tablе привязаны к конкретной сессии оракла.
...
Рейтинг: 0 / 0
И снова сессии Oracle и сессии Apex
    #39130541
Casufi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex_lip,
Можно использовать апексовые коллекции, можно в скрипте авторизации делать dbms_session.set_context
...
Рейтинг: 0 / 0
И снова сессии Oracle и сессии Apex
    #39130600
alex_lip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо.
Попробуем dbms_session.set_context - похоже это то что надо.
...
Рейтинг: 0 / 0
И снова сессии Oracle и сессии Apex
    #39130603
blkangel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alex_lipС Apex так не прокатило, так как там использование сессий Oracle не прокатывает.
Вопрос - как получить идентификатор пользователя(на стороне Oracle для использования в тригерах и пакетах), который работает в системе, если он зашел через Apex?
То есть нужен ID пользователя на время его работы в И-нет приложении. В случае закрытия И-нет приложения - ID должен исчезнуть.
Если у вас авторизация по вашей табличке, то вот пример триггера который стоит у нас на всех таблицах.
create or replace trigger tBI_YOUR_TABLE
before insert on YOUR_TABLE for each row
declare
v_app_user varchar2(512);
v_user_id number;
begin
select v('APP_USER') into v_app_user from dual;
if v_app_user is null then
v_user_id:=-1;
else
Begin
select krn_user_id into v_user_id from krn_user where upper(login)=upper(v_app_user);
exception when no_data_found then v_user_id:=-1;
end;
end if;
:new.create_user_id:=v_user_id;
:new.create_date:=sysdate;
end;
...
Рейтинг: 0 / 0
И снова сессии Oracle и сессии Apex
    #39130604
blkangel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alex_lip,

т.е. по логину апекса, ищется ИД пользователя.
...
Рейтинг: 0 / 0
И снова сессии Oracle и сессии Apex
    #39130631
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex_lipВ случае закрытия И-нет приложения - ID должен исчезнуть
вы не задумывались, что при закрытии, вам и этот ID не нужен, т.к. запроса не будет.
Отсюда вывод, что APP_USER вполне достаточно или любой другой инициализируемой строго на запрос а не на сессию.
...
Рейтинг: 0 / 0
И снова сессии Oracle и сессии Apex
    #39130633
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex_lipСпасибо.
Попробуем dbms_session.set_context - похоже это то что надо.
-1
...
Рейтинг: 0 / 0
И снова сессии Oracle и сессии Apex
    #39130639
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex_lipкто в данный момент работает в системе
в APEX сложно отследить "кто вышел". Если надо именно это вашим начальникам.
...
Рейтинг: 0 / 0
И снова сессии Oracle и сессии Apex
    #39130944
alex_lip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо господину Курдль

http://www.sql.ru/forum/1122487/prisvoit-app-user-skrytomu-textbox


Воспользовался его методом
авторТриггер будет находить имя пользователя, если его поместить в контекст сессии

Код: plsql
1.
DBMS_SESSION.SET_CONTEXT ( 'CLIENTCONTEXT', 'CURRENT_APP_USER', :APP_USER);



Потом в триггере его можно извлечь:
Код: plsql
1.
select SYS_CONTEXT ('CLIENTCONTEXT', 'CURRENT_APP_USER' ), OWA_UTIL.GET_CGI_ENV('remote_addr') into s_User, s_Address from dual;





Всем спасибо!!
...
Рейтинг: 0 / 0
И снова сессии Oracle и сессии Apex
    #39130960
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex_lip,
оно и короче в 2 раза будет работать
Код: plsql
1.
select v('APP_USER')  ,  OWA_UTIL.GET_CGI_ENV('remote_addr') into ....
...
Рейтинг: 0 / 0
И снова сессии Oracle и сессии Apex
    #39131056
alex_lip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Контекст сам почистится если пользователь отвалится - в этом преимущество. А если один пользователь зайдет с двух компьютеров - тоже проблем не будет.
...
Рейтинг: 0 / 0
И снова сессии Oracle и сессии Apex
    #39131078
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex_lipКонтекст сам почистится если пользователь отвалится - в этом преимущество.

==это теория? Ты сам себя успокоил.

А если один пользователь зайдет с двух компьютеров - тоже проблем не будет.

=== а если с IE и фокса на одном компе сразу, проблемы будут?


ты просто с СУБД пришёл, вот и пугает тебя :APP_USER в триггере.
Думаешь, что он не в контексте и будет жить вечно.
...
Рейтинг: 0 / 0
И снова сессии Oracle и сессии Apex
    #39131180
alex_lip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Тоже попробуем. Спасибо.
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Oracle APEX [игнор отключен] [закрыт для гостей] / И снова сессии Oracle и сессии Apex
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]