在plsql中,我们在哪里存储在软件包规范中声明的全局变量
Oracle将全局变量存储在是程序全局区域的一部分的内存结构中。您可以在《甲骨文概念指南》的"内存体系结构章节"一章中阅读有关PGA的信息。
变量只能通过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;
/
我们无法查看数据字典中的变量数据,但是我们可以通过数据字典检查数据的大小。在这种情况下,存储80MB的原始数据需要大约105MB的内存:
--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;
(我的答案是基于您在问的假设,因为您担心存储很多数据。如果我的假设错误,请更新问题以准确解释您要寻找的内容。(