使用来自另一个表

时间:2016-05-24 14:17:28

标签: plsql oracle11g oracle-apex

我有一个名为 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;

1 个答案:

答案 0 :(得分:1)

您可以使用动态SQL在col_vals行上的游标循环内基于col_mappings值生成和执行insert语句:

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的多行中,并带有大量空值。希望这就是你的意图。