powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle Forms [игнор отключен] [закрыт для гостей] / активные сессии в Oracle Forms
10 сообщений из 10, страница 1 из 1
активные сессии в Oracle Forms
    #33191851
Olllka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
здравствуйте!
необходимо в Forms отобразить таблицу, отражающую текущие активные сессии.
В Forms отбражается представление
create or replace view ACTIVE_SESSIONS_VIEW (
SSO_ID,
AUDSID,
FIO,
OTDNAME,
OTD,
STRTYPE,
SESSION_ID,
SERIAL#,
MACHINE,
LOGON_TIME )
as
(
select /*+ RULE */a.sso_id,
b.audsid,
c.fam||' '||c.im||' '||c.ot as fio,
otdname(c.otd,c.strtype) as otdname,
c.otd,
c.strtype,
a.sid,
b.serial#,
b.machine,
to_char(b.logon_time,'HH24:MM:SS')
from
active_sessions a ,
sys.v_$session b,
logon_info d,
otdpers c
where
a.sid = b.audsid
and a.sso_id = d.userid(+)
and d.otdpers = c.code(+)
)
В active_sessions инфа заносится в Forms
if userid is not null then
dog_ctx.set_fgac_id(userid,'S');
else
dog_ctx.set_fgac_id(user,'B');
end if;
insert into ACTIVE_SESSIONS (sso_id,sid) values(nvl(userid,user),SYS_CONTEXT('USERENV','sessionid'));
А проблема заключается в том, что в формсах для текущей сессии, запущенной на том компе, откуда вызвали преиложение, отражается сражу три записи, с разными serial#, а в базе на тот момент только одна, как и полагается:(
...
Рейтинг: 0 / 0
активные сессии в Oracle Forms
    #33192097
waspwort
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Чем не устраивает
SELECT * FROM v$session WHERE status = 'ACTIVE'
...
Рейтинг: 0 / 0
активные сессии в Oracle Forms
    #33192189
Olllka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Проблема в том, что если я смотрю в своем active_sessions_view или в V_$sessions, то вижу единственную запись, касающююся моего идентификатора сессии, а вот в формсах почему-то их три, они отличаются временем входа и атрибутом serial#(у нужной мне записи он всегда наибольший) . Откуда еще две? И почему их не видно параллельноиз SQL Navigator?
forms_ddl('commit') сделан
...
Рейтинг: 0 / 0
активные сессии в Oracle Forms
    #33192295
waspwort
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Силюсь понять, почему все так сложно сделано :)
Тебе нужно вывести на форме результат селекта, который возвращал бы только активные сессии, так? Если да, то зачем нужна таблица active_sessions? В динамическом представлении v$session есть атрибут STATUS, который говорит о том, активна сессия или нет. Соответственно, для того чтобы отобразить только активные сессии, достаточно указать условие where status = 'ACTIVE'.
Зачем нужны эти извращения с таблицей active_sessions? Что значит фраза
Код: plaintext
В active_sessions инфа заносится в Forms
?
...
Рейтинг: 0 / 0
активные сессии в Oracle Forms
    #33192308
Olllka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Интересуют только те сессии, которые запущены приложением Forms
и при запуске приложения в триггере и происходит

userid := get_application_property(SSO_USERID);
if userid is not null then
dog_ctx.set_fgac_id(userid,'S');
else
dog_ctx.set_fgac_id(user,'B');
end if;
insert into ACTIVE_SESSIONS (sso_id,sid) values(nvl(userid,user),SYS_CONTEXT('USERENV','sessionid'));
...
Рейтинг: 0 / 0
активные сессии в Oracle Forms
    #33192339
waspwort
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я конечно понимаю, что у тебя в триггере происходит dog_ctx.set_fgac_id(userid,'S')
Только это ни о чем не говорит. Используй модуль sys.dbms_application_info для регистрации запущенного приложения и критерий отбора активных сессий.
...
Рейтинг: 0 / 0
активные сессии в Oracle Forms
    #33192353
waspwort
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
автор
userid := get_application_property(SSO_USERID);
if userid is not null then
dog_ctx.set_fgac_id(userid,'S');
else
dog_ctx.set_fgac_id(user,'B');
end if;
insert into ACTIVE_SESSIONS (sso_id,sid) values(nvl(userid,user),SYS_CONTEXT('USERENV','sessionid'));


Зря ты так делаешь

[SRС]
Connected to Oracle8i Enterprise Edition Release 8.1.6.0.0
Connected as igor


SQL>
SQL> create or replace trigger trig_log
2 AFTER logon ON DATABASE
3 --for each row
4 declare
5 -- local variables here
6 begin
7 INSERT INTO t1 VALUES (1);
8 end trig_log;
9 /

Trigger created

SQL> select * from t;

select * from t

ORA-00942: òàáëèöà èëè ïðåäñòàâëåíèå ïîëüçîâàòåëÿ íå ñóùåñòâóåò

SQL> select * from t1;

I
---------------------------------------

SQL> disconnect;
Not logged on

SQL> connect
Connected to Oracle8i Enterprise Edition Release 8.1.6.0.0
Connected as igor

SQL> select * from t1;

I
---------------------------------------
1
1
1

SQL
[/SRC]
...
Рейтинг: 0 / 0
активные сессии в Oracle Forms
    #33192383
Olllka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
waspwortЯ конечно понимаю, что у тебя в триггере происходит dog_ctx.set_fgac_id(userid,'S')
Только это ни о чем не говорит. Используй модуль sys.dbms_application_info для регистрации запущенного приложения и критерий отбора активных сессий.

ой, извиняюсь, забыла
procedure set_fgac_id(usr varchar2,atype varchar2) is

cursor main(u varchar2,a varchar2) is
select A.* from ACCON A
where Upper(A.userid) = Upper(u) and A.auth = a;

ou varchar2(20);
begin
DBMS_SESSION.SET_CONTEXT('dog_ctx', 'user', usr);
DBMS_SESSION.SET_CONTEXT('dog_ctx', 'auth', atype);

for rec in main(usr,atype) loop
DBMS_SESSION.SET_CONTEXT('dog_ctx', 'UTYPE', rec.strtype);
DBMS_SESSION.SET_CONTEXT('dog_ctx', 'UINFO', rec.otd);
DBMS_SESSION.SET_CONTEXT('dog_ctx', 'OTDPERS', rec.otdpers);
end loop;

end;
...
Рейтинг: 0 / 0
активные сессии в Oracle Forms
    #33192398
Olllka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Insert был в триггере When-new_form-instance.
Хм.. это вроде как три раза сработал?
А в чем спасение? :)
...
Рейтинг: 0 / 0
активные сессии в Oracle Forms
    #33192547
waspwort
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я ж говорю, используй пакет DBMS_APPLICATION_INFO. Вот что Кайт про него пишет
Том Кайт
Пакет DBMS_APPLICATION_INFO можно использовать для получения ответов на
эти и многие другие вопросы. Он позволяет устанавливать значения трех столбцов —
CLIENT_INFO, ACTION и MODULE — соответствующей сеансу строки в представле-
нии V$SESSION. Пакет предоставляет функции не только для установки этих значе-
ний, но и для их получения. Кроме того, один из параметров встроенных функций
USERENV и SYS_CONTEXT позволяет получить значения столбца CLIENT_INFO
в запросе. Можно, например, выполнить SELECT USERENV('CLIENT_INFO')
FROM DUAL или использовать конструкцию WHERE SOME_COLUMN -
SYS_CONTEXT('USERENV','CLIENT_INFO') в запросах. Значения, устанавливаемые
в представлениях V$, сразу же доступны в других сеансах. Фиксировать их не нужно,
что позволяет эффективно использовать эти представления для взаимодействия с "вне-
шним миром".


Мой вариант, как решить твою проблему:
1) создаешь в форме триггер POST-LOGON следующего содержания:
dbms_application_info.set_module('test form','');
Строковые значения подставляешь свои, ессно.
2) Отображаешь на своей информационной форме следующий запрос:
select * from v$session where module = 'test form'

Соответственно показываются только те сессии, соответствующие запущенным формам, в которых есть триггер POST-LOGON.
Недостаток - этот триггер надо сделать во всех формах...
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Oracle Forms [игнор отключен] [закрыт для гостей] / активные сессии в Oracle Forms
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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