С переменными в заголовке пакета можно проворачивать подобное.
Создадим пакет с "глобальными переменными в рамках сессии":
create or replace package pck_global_values as
v_osuser varchar2(100);
v_sid number;
end;
Создадим таблицу клиентов, в которой при вставке данных оператором запоминается, кто и из какой сессии вставил данные:
create table clients_ext(client_name varchar2(100), osuser varchar2(100), sid number);
Выполним в двух различных сессиях один и тот же код:
-- инициализируем глобальные переменные для многократного использования в рамках сессии:
begin
pck_global_values.v_osuser := SYS_CONTEXT('USERENV', 'OS_USER');
pck_global_values.v_sid := SYS_CONTEXT('USERENV', 'SID');
dbms_output.put_line('v_osuser = ' || pck_global_values.v_osuser);
dbms_output.put_line('v_sid = ' || pck_global_values.v_sid);
end;
-- вставим немного случайных клиентов и сделаем commit:
begin
for i in 1 .. 3 loop
insert into clients_ext
(client_name, osuser, sid)
values
(dbms_random.string('u', 6),
pck_global_values.v_osuser,
pck_global_values.v_sid);
end loop;
commit;
end;
-- посмотрим, что вставилось:
select * from clients_ext;
Регулярные выражения.
О регулярных выражениях можно почитать по ссылке:
http://apps-oracle.ru/regular_expression-2
Подробнее мы их разберем в задачах ниже.