我有一个名为:col_mapping的Oracle表,其中该表中的列具有来自另一个表的列的列值。
表的示例数据:col_mapping
ID DESCR COL_VALS
------------------------------
1 LABEL COL_1
2 NAME_ADDR COL_2:COL_3
3 SALARY COL4
基于上表,我现在想遍历col_mapping中的每个记录并将COL_VALS用作我的一部分
select COL_VALS from other_tab
显然,在有多个值(例如COL_2:COL_3)的地方,需要将':'替换为','
SELECT COL_1 from other_tab;
SELECT COL_2,COL_3 from other_tab;
SELECT COL_4 from other_tab;
您可以col_vals
使用游标循环col_mappings
在行上的游标循环内,根据值使用动态SQL生成并执行插入语句:
begin
for r in (select replace(col_vals, ':', ',') as cols from col_mapping) loop
dbms_output.put_line('insert into staging_tab(' || r.cols || ')'
|| ' select ' || r.cols || ' from other_tab');
execute immediate 'insert into staging_tab(' || r.cols || ')'
|| ' select ' || r.cols || ' from other_tab';
end loop;
end;
/
光标仅获cols_val
取值,用逗号替换冒号。生成的插入将修改后cols_val
的插入用作插入列列表和选择列表-因为您说登台表将与other_tab
结构匹配。
该dbms_output
行只是为了您可以看到生成的语句-无需运行代码,set serveroutput on
无论如何您都需要看到或等效看到它。启用该功能后,使用示例映射数据运行该块将显示:
PL/SQL procedure successfully completed.
insert into staging_tab(COL_1) select COL_1 from other_tab
insert into staging_tab(COL_2,COL_3) select COL_2,COL_3 from other_tab
insert into staging_tab(COL4) select COL4 from other_tab
您最终将获得来自每行的数据,这些数据other_tab
分布在中的多行中staging_tab
,并且具有许多空值。希望这就是您的意图。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句