我们在哪里存储在PLSQL包规范中声明的全局变量

时间:2019-05-07 09:42:32

标签: oracle plsql package

在PLSQL中,我们在哪里存储程序包规范中声明的全局变量

1 个答案:

答案 0 :(得分:1)

Oracle将全局变量存储在程序全局区域的一部分的内存结构中。您可以在Memory Architecture chapter of the Oracle Concepts Guide中阅读有关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;

(我的回答是基于您因为担心存储大量数据而提出的假设。如果我的假设是错误的,请更新问题以准确解释您要查找的内容。)