将数据从一个表解析到另一个表

时间:2016-09-15 18:22:14

标签: plsql

我正在尝试编写一个查询,将数据从一个表复制到PL / SQL中的另一个表,我需要帮助,谢谢。

源表有单个字段,目标有3个字段。 源表中的数据从05,10,30和99开始,如下所示

05-1   
10-1
30-1
10-2
30-2
30-2
30-2
30-2
10-3
30-3
99-1 
05-2
10-4
30-4

需要将数据复制到另一个包含3列的表中,如下所示

A      B      C
05-1   10-1   30-1
05-1   10-2   30-2
05-1   10-2   30-2
05-1   10-2   30-2
05-1   10-2   30-2
05-1   10-3   30-3 
05-2   10-4   30-4

1 个答案:

答案 0 :(得分:0)

您的问题尚不清楚,但根据您提供的输入和输出的猜测,我假设生成输出的规则与下面的内容相似。

1)当它以99开始时忽略它

2)当它以05 set变量开始并移至下一行时。

3)当它以10个设定变量开始并移至下一行时。

4)当它以30个插入表格开始时,使用您在前两个步骤中设置的变量。

如果上述规则正确,则以下规则应有效。当然,您需要替换您的表/字段名称。如果我从所提供的数据中误解了你的要求(很可能因为它不是很清楚),这至少应该为你提供一个起点。

declare 

cursor c_loops is
select column1 from table1;

v_col1 varchar2(10) default null;
v_col2 varchar2(10) default null;
v_col3 varcahr2(10) default null;

begin
  for v_row in c_loops loop
     case (substr(v_row.column1, 0, 2) 
       when '99' then
          -- do nothing ignore row
          null;
       when '05' then
          v_col1 := v_row.column1;
       when '10' then
          v_col2 := v_row.column1;
       when '30' then
          v_col3 := v_row.column1;
          insert into table2 (col1, col2, col3) values (v_col1, v_col2, v_col3);
       else
         -- output some error here because you have unexpected input
         null;
     end case;
  end loop;
end;