我正在编写一个SQL过程来执行以下任务。
表A可包含COL1,COL2和COL3的任意数量的组合。
这里我正在读取表A中的所有数据,但我不想每次都在表B上发出搜索查询以查找表B中的键。但我喜欢在某处存储/获取表B的数据(映射等),然后想在那里搜索并插入表C.是否可以在PL / SQL?
简而言之,我想缓存表B数据并执行搜索并获取数据。
答案 0 :(得分:1)
我们使用数组来缓存查找值的数据,我们做了很多事情,例如我们有一个t_sites表,我们想要缓存整个数据集,主键是varchar2(10)所以我们创建一个索引的数组varchar2(10)...这是代码的一个例子:
declare
-- type and array to hold all the data from the query
type sites_rec_t is record (
addr_id t_sites.addr_id%type,
code t_sites.code%type,
description t_sites.description%type,
pm_telephone t_sites.pm_telephone%type
);
-- array for the lookups
type sites_t is table of sites_rec_t index by varchar2(10);
a_sites sites_t;
v_site_arr_key varchar2(10);
begin
-- populate the arrays
for r in ( select addr_id, code, description, pm_telephone from t_sites ) loop
a_sites(r.code).addr_id := r.addr_id;
a_sites(r.code).code := r.code;
a_sites(r.code).description := r.description;
a_sites(r.code).pm_telephone := r.pm_telephone;
end loop;
-- example of how to loop through the varchar indexed array as you cant do for i in 1 .. array.count loop
v_site_arr_key := a_sites.first;
while v_site_arr_key is not null loop
dbms_output.put_line(v_site_arr_key || '=' || a_sites(v_site_arr_key).description || ', ' || a_sites(v_site_arr_key).addr_id);
v_site_arr_key := a_sites.next(v_site_arr_key);
end loop;
end;