PL SQL с сщхранением переменных

gvgstruts
Дата: 02.08.2005 16:38:49
Проблема такая:
необходимо создать пакет в котором сохранялись бы переменные пакета, так чтобы можно было их получать через функции пакета, причем из разных сессий. Применять постоянные таблицы и очереди нельзя.
Кто нибудь может что-либо посоветовать?
Vadim_Maximov
Дата: 02.08.2005 16:42:20
Есть вроде какие-то глобальные контексты...
Где-то слышал
Дата: 02.08.2005 16:48:01
Контексты не катят - у каждой сессии свои значения контекста. Вроде, нужно копать в сторону PL/SQL Pipeline. Ни разу с ними не работал, поэтому подробнее не расскажу.
Vadim_Maximov
Дата: 02.08.2005 16:53:50
Ключевое слово было "глобальные".
Вот, нашел что-то в доке.
pamir
Дата: 02.08.2005 16:55:51
Можно, например, с алертами повозиться... Но без главного процесса (сессии или еще чего-то) будет в принципе сложно это реализовать. Например, 2 сессии одновременно хотят установить разные значения одной переменной. Какое значение будет в переменной? Кто будет этим рулить? Если это решено - на мой взгляд, алерты помогут (а алетрты, обвязанные автономными транзакциями вообще творят чудеса )
Andrew Max
Дата: 02.08.2005 17:01:57
SQL> connect max
Введите пароль:
Соединено.
SQL>
SQL> create or replace package GlobalCtx is
  2   procedure Set_Value(attr in varchar2, val in varchar2);
  3  end;
  4  /

Пакет создан.

SQL>
SQL> create or replace package body GlobalCtx is
  2   procedure Set_Value(attr in varchar2, val in varchar2) is
  3   begin
  4    dbms_session.set_context('GLOBAL_CTX', attr, val);
  5   end;
  6  end;
  7  /

Тело пакета создано.

SQL> create or replace context GLOBAL_CTX
  2   using GlobalCtx
  3   ACCESSED GLOBALLY;

Контекст создан.

SQL> exec GlobalCtx.Set_Value('TEST', 'SUCCESS');

Процедура PL/SQL успешно завершена.

SQL> select sys_context('GLOBAL_CTX', 'TEST') Test from dual;

TEST
-----------------------------------------------------------------
SUCCESS

SQL> connect ttt
Введите пароль:
Соединено.
SQL>
SQL> select sys_context('GLOBAL_CTX', 'TEST') Test from dual;

TEST
-----------------------------------------------------------------
SUCCESS

SQL>

P.S. В этом простом примере значения параметров контекста будут доступны всем сессиям. Но, при необходимости, значения глобального контекста можно "разделять" по SESSION_USER и CLIENT_IDENTIFIER.