Где мы храним глобальные переменные, которые объявлены в спецификации пакета в PLSQL - PullRequest
0 голосов
/ 07 мая 2019

В PLSQL, где мы храним глобальные переменные, объявленные в спецификации пакета

1 Ответ

1 голос
/ 08 мая 2019

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;

(Мой ответ основан на предположении, что вы спрашиваете, потому что беспокоитесь о хранении большого количества данных. Если мое предположение неверно, обновите вопрос, чтобы точно объяснить, что вы ищете.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...