我寫加載從架構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