缓存表数据并对其执行搜索

时间:2014-08-12 08:36:56

标签: oracle plsql plsqldeveloper

我正在编写一个SQL过程来执行以下任务。

  1. 从表A中读取数据。其中列为Col1,Col2,Col3,Col4,Col5,Col6。
  2. 我必须搜索表B中的主键(编号)并提交Col1,Col2,Col3。
  3. 在表6中插入主键COL4,COL5,COL6。
  4. 表A可包含COL1,COL2和COL3的任意数量的组合。

    这里我正在读取表A中的所有数据,但我不想每次都在表B上发出搜索查询以查找表B中的键。但我喜欢在某处存储/获取表B的数据(映射等),然后想在那里搜索并插入表C.是否可以在PL / SQL?

    简而言之,我想缓存表B数据并执行搜索并获取数据。

1 个答案:

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