在写oracle的存储过程时,都会遇到一些业务逻辑,需要写Function,来实现一些业务,然后返回一个结果,而在使用这个Function的时候又是通过一句SQL来直接调用,但是如果在Function中有查询数据表读取配置或者其他业务逻辑的时候,实际上的实现原理会是一条记录查询一次配置表。如果再遇上数据量很大的时候,这样的语句执行就变得非常非常的慢了。这时会想,是否也能有像java程序中hashmap的方法,将配置数据加载到内存中呢?
下面就来介绍这个oracle的hashmap实现方法
--定义类型,作为加载数据的对象
type t_hashmap_type is record(
name varchar2(512));
TYPE map_array IS TABLE OF t_hashmap_type INDEX BY varchar2(512); -- BINARY_INTEGER;
v_HashMap map_array;
--将配置数据加载到全局对象v_HashMap中
procedure proc_load_config is
t_hashmap t_hashmap_type;
v_errtext VARCHAR2(4000);
cur_key varchar2(1024);
begin
for c_config in (select id,name
from test_table) loop
t_hashmap.name := c_config.name;
v_Domains(c_config.id) := t_hashmap;
end loop;
end proc_load_config;
取值方法
vconfig t_hashmap_type;
vconfig := v_HashMap(id);