在数据加载处理当中,经常涉及主键查找的问题;
在加载维表过程当中,再插入新的记录或修改已有记录之前,要通过对某些逻辑的比较来确定当前记录是否存在。在加载事实表中,经常涉及到更多的主键查找处理。事实表加载往往在维表加载完后进行加载,所以需要查找有关维表的主键值,并以此确定事实表的外键值。
常用的方法是,通过从源数据提取的数据部分的逻辑键于数据仓库内有关维表的逻辑表进行比较匹配,如果发现匹配,则取维表的主键值,并以此作为事实表的外键值加载数据到事实表中。
下面举一个例子:
首先定义一个函数,该函数接受维表名、主键名、匹配条件为参数,返回维表主键值
create or replace function get_dim_key
(p_tab_name in varchar2,
p_key_column_name in varchar2,
p_match in varchar2)
return number is
q_string varchar2(4000);
v_key_value number default null;
begin
q_string:='select ' || p_key_column_name||' from '||p_tab_name || ' where ' || p_match;
execute immediate q_string into v_key_value;
return v_key_value;
exception
when no_data_found then
return null;
when others then
raise;
end;
在实际应用中,可使用数据列变量进行函数调用:
select get_dim_key('products','prod_id', 'prod_name='||' ' ' cat F' ' ' || ' and supplier_id=168 ')
from dual;