【问题标题】:Where do we store the global variables which are declared in the package specification in PLSQL我们在哪里存储在 PLSQL 的包规范中声明的全局变量
【发布时间】:2019-09-24 22:46:49
【问题描述】:

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

【问题讨论】:

  • 商店是什么意思?持久存储在表中? “我们”是谁?
  • 程序在哪里存储变量?

标签: oracle plsql package


【解决方案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;
/

我们无法查看数据字典中的变量数据,但是可以通过数据字典查看数据的大小。在这种情况下,大约需要 105MB 的内存来存储 80MB 的原始数据:

--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;

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-18
    • 1970-01-01
    • 1970-01-01
    • 2018-05-08
    • 2014-08-09
    • 2017-06-10
    • 1970-01-01
    相关资源
    最近更新 更多