oracle - 我们在哪里存储在 PLSQL 的包规范中声明的全局变量
问题描述
在 PLSQL 中,我们在哪里存储包规范中声明的全局变量
解决方案
Oracle 将全局变量存储在属于程序全局区的内存结构中。您可以在 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;
/
我们无法查看数据字典中的变量数据,但是可以通过数据字典查看数据的大小。在这种情况下,大约需要 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;
(我的回答是基于您所问的假设,因为您担心存储大量数据。如果我的假设是错误的,请更新问题以准确解释您要查找的内容。)
推荐阅读
- flutter - 添加 integration_test 包时应用程序构建崩溃
- html - 我怎样才能有分屏布局
- create-react-app - Craco - 无法解决依赖错误
- excel - 禁用 Windows 中特定应用程序的可访问性
- sql - 如何反转错误建模的 1:1 关系?
- vue.js - Vue.js 模板上的 PhpStorm 未解析变量
- dictionary - 如何在groovy的map变量中声明map并在jenkinsfile中调用它
- excel - 从 ComboBox 中搜索值,然后将值从 Textbox 写入单元格
- flutter - 在颤动中使用堆栈时内容重叠
- google-cloud-kms - 使用 Cloud KMS 加密多个项目