我写加载从架构A一些数据架构B的PL/SQL程序,他们都非常不同的模式,我不能改变模式B的结构转换表列键值对
模式A中的各个表中的各列(在视图中连接在一起)需要作为表中的2列中的key =>值对插入到模式B中,每个列都在单独的行中。例如,一个员工的名字可能是存在于架构A employee.firstname,但需要在架构B被输入为:
id=>1, key=>'A123', value=>'Smith'
有近100项,有更多的要添加的潜力在未来。这意味着我不想对这些键中的任何一个进行硬编码。
示例代码:
create table schema_a_employees (
emp_id number(8,0),
firstname varchar2(50),
surname varchar2(50)
);
insert into schema_a_employees values (1, 'James', 'Smith');
insert into schema_a_employees values (2, 'Fred', 'Jones');
create table schema_b_values (
emp_id number(8,0),
the_key varchar2(5),
the_value varchar2(200)
);
我想到了一个完美的解决方案将最有可能涉及查找表来确定插入什么样的价值为每个键,并没有涉及硬编码有效像数十个类似的语句.. ..
insert into schema_b_values (1, 'A123', v_firstname);
insert into schema_b_values (1, 'B123', v_surname);
我想什么,能够做的就是在架构A本地查找表,列出所有的键从架构B,与给出了的列名的列沿表格Schema A应该用来填充,例如模式A中的关键“A123”应填入模式A中的列“firstname”的值,例如,
create table schema_a_lookup (
the_key varchar2(5),
the_local_field_name varchar2(50)
);
insert into schema_a_lookup values ('A123', 'firstname');
insert into schema_a_lookup values ('B123', 'surname');
但我不知道如何动态地使用查找表中的值告诉Oracle要使用哪些列。
所以我的问题是,是否有一个优雅的解决方案,用schema_a_employees中的数据填充schema_b_values表而不对每个可能的键(即A123,B123等)进行硬编码?
干杯。
+!用于提供设置说明。这使测试解决方案变得更容易。 – APC 2010-04-13 15:27:26