|
|
|
И снова сессии Oracle и сессии Apex
|
|||
|---|---|---|---|
|
#18+
Всем доброго времени суток. В клиент-серверной части для понимания кто в данный момент работает в системе использовали глобальную временную таблицу, которая существует только на время текущей сессии Oracle Код: sql 1. 2. 3. 4. 5. 6. То есть пользователь заходит в систему - появляется запись. В случае дисконнекта - запись исчезает. С Apex так не прокатило, так как там использование сессий Oracle не прокатывает. Вопрос - как получить идентификатор пользователя(на стороне Oracle для использования в тригерах и пакетах), который работает в системе, если он зашел через Apex? То есть нужен ID пользователя на время его работы в И-нет приложении. В случае закрытия И-нет приложения - ID должен исчезнуть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2015, 10:40 |
|
||
|
И снова сессии Oracle и сессии Apex
|
|||
|---|---|---|---|
|
#18+
alex_lipВсем доброго времени суток. В клиент-серверной части для понимания кто в данный момент работает в системе использовали глобальную временную таблицу, которая существует только на время текущей сессии Oracle Код: sql 1. 2. 3. 4. 5. 6. То есть пользователь заходит в систему - появляется запись. В случае дисконнекта - запись исчезает. С Apex так не прокатило, так как там использование сессий Oracle не прокатывает. Вопрос - как получить идентификатор пользователя(на стороне Oracle для использования в тригерах и пакетах), который работает в системе, если он зашел через Apex? То есть нужен ID пользователя на время его работы в И-нет приложении. В случае закрытия И-нет приложения - ID должен исчезнуть. Temporary table использовать для апекса нельязя...Т.к используется пул подключений. Менеджер пула выбирает свободное подключение(не занятое транзакцией или selectoм) и ораела работает с этой сессией. Может случится так что транзакция на одной сессии из пула ,а уже результат изменений (select report) другой сессией.(и соответсвенно другим дескриптором оракла) А temporary tablе привязаны к конкретной сессии оракла. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2015, 10:46 |
|
||
|
И снова сессии Oracle и сессии Apex
|
|||
|---|---|---|---|
|
#18+
alex_lip, Можно использовать апексовые коллекции, можно в скрипте авторизации делать dbms_session.set_context ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2015, 10:48 |
|
||
|
И снова сессии Oracle и сессии Apex
|
|||
|---|---|---|---|
|
#18+
Спасибо. Попробуем dbms_session.set_context - похоже это то что надо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2015, 11:40 |
|
||
|
И снова сессии Oracle и сессии Apex
|
|||
|---|---|---|---|
|
#18+
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; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2015, 11:41 |
|
||
|
И снова сессии Oracle и сессии Apex
|
|||
|---|---|---|---|
|
#18+
alex_lip, т.е. по логину апекса, ищется ИД пользователя. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2015, 11:42 |
|
||
|
И снова сессии Oracle и сессии Apex
|
|||
|---|---|---|---|
|
#18+
alex_lipВ случае закрытия И-нет приложения - ID должен исчезнуть вы не задумывались, что при закрытии, вам и этот ID не нужен, т.к. запроса не будет. Отсюда вывод, что APP_USER вполне достаточно или любой другой инициализируемой строго на запрос а не на сессию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2015, 12:02 |
|
||
|
И снова сессии Oracle и сессии Apex
|
|||
|---|---|---|---|
|
#18+
alex_lipСпасибо. Попробуем dbms_session.set_context - похоже это то что надо. -1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2015, 12:05 |
|
||
|
И снова сессии Oracle и сессии Apex
|
|||
|---|---|---|---|
|
#18+
alex_lipкто в данный момент работает в системе в APEX сложно отследить "кто вышел". Если надо именно это вашим начальникам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2015, 12:08 |
|
||
|
И снова сессии Oracle и сессии Apex
|
|||
|---|---|---|---|
|
#18+
Спасибо господину Курдль http://www.sql.ru/forum/1122487/prisvoit-app-user-skrytomu-textbox Воспользовался его методом авторТриггер будет находить имя пользователя, если его поместить в контекст сессии Код: plsql 1. Потом в триггере его можно извлечь: Код: plsql 1. Всем спасибо!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2015, 15:51 |
|
||
|
И снова сессии Oracle и сессии Apex
|
|||
|---|---|---|---|
|
#18+
alex_lip, оно и короче в 2 раза будет работать Код: plsql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2015, 16:00 |
|
||
|
И снова сессии Oracle и сессии Apex
|
|||
|---|---|---|---|
|
#18+
Контекст сам почистится если пользователь отвалится - в этом преимущество. А если один пользователь зайдет с двух компьютеров - тоже проблем не будет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2015, 17:07 |
|
||
|
И снова сессии Oracle и сессии Apex
|
|||
|---|---|---|---|
|
#18+
alex_lipКонтекст сам почистится если пользователь отвалится - в этом преимущество. ==это теория? Ты сам себя успокоил. А если один пользователь зайдет с двух компьютеров - тоже проблем не будет. === а если с IE и фокса на одном компе сразу, проблемы будут? ты просто с СУБД пришёл, вот и пугает тебя :APP_USER в триггере. Думаешь, что он не в контексте и будет жить вечно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2015, 17:21 |
|
||
|
|

start [/forum/topic.php?fid=50&msg=39130527&tid=1874745]: |
0ms |
get settings: |
14ms |
get forum list: |
14ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
47ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
50ms |
get tp. blocked users: |
1ms |
| others: | 255ms |
| total: | 396ms |

| 0 / 0 |
