Oracle хранит глобальные переменные в структурах памяти, которые являются частью Глобальной области программы. Вы можете прочитать о PGA в главе Архитектура памяти в Руководстве по концепциям Oracle .
Переменные доступны только через PL / SQL, мы не можем получить к ним доступ через представления словаря данных.
Переменные сеанса могут помещаться только в PGA, они не могут пролиться на диск, поэтому мы можем быть осторожны при загрузке слишком большого количества данных. Нам нужно избегать хранения больших таблиц в переменных, что часто можно сделать, обрабатывая курсоры с помощью циклов FOR
или используя предложение LIMIT
.
Например, следующий код загружает много данных в простой набор.
--Load 20,000 large strings. Takes about 10 seconds.
declare
type string_nt is table of varchar2(4000);
v_strings string_nt := string_nt();
begin
for i in 1 .. 20000 loop
v_strings.extend;
v_strings(v_strings.count) := lpad('A', 4000, 'A');
end loop;
null;
end;
/
Мы не можем просматривать переменные данные в словаре данных, но мы можем проверить размер данных через словарь данных. В этом случае для хранения 80 МБ необработанных данных требуется около 105 МБ памяти:
--Maximum session PGA memory.
select value/1024/1024 mb
from v$sesstat
join v$statname
on v$sesstat.statistic# = v$statname.statistic#
where v$statname.name = 'session pga memory max'
order by value desc;
(Мой ответ основан на предположении, что вы спрашиваете, потому что беспокоитесь о хранении большого количества данных. Если мое предположение неверно, обновите вопрос, чтобы точно объяснить, что вы ищете.)