A表字段a1,a2,a3,a4.
B表字段b1,b2,b3现在要把A表的一条记录拆成两条插到B表里也就是说对每一条A表记录,实行
insert A(a1,a2,a4) into B(b1,b2,b3)
insert A(a1,a3,a4) into B(b1,b2,b3)这个存储过程如何实现?

解决方案 »

  1.   

      open mycursor for ' 
    select a1,a2,a3,a4 from TABLE1
    ';
      loop
        fetch mycursor into col1, col2, col3, col4;--把游标中的数据存入变量,可以有多个变量
      if mycursortest%found then                   --如果找到数据,找不到数据为notfound
        insert into TABLE2
          (b1,b2,b3
          ) values
          (col1,col2,col4
          );
        insert into TABLE2
          (b1,b2,b3
          ) values
          (col1,col3,col4
          );
      else
        dbms_output.put_line
        (
          '处理完毕'
        )
        ;
        exit;--退出循环
      end if;
    end loop;
    close mycursortest;--关闭游标
      

  2.   


    insert A(a1,a2,a4) into B(b1,b2,b3) 
    insert A(a1,a3,a4) into B(b1,b2,b3)楼主 你的意思是把A表的每条记录的第1,2,4和 第1,3,4列分别插入到B表中吧。。
    貌似我没理解错
      

  3.   

    好的,因为很少写store procedure,上手有点慢,新任务要维护一大堆store procedure,
    有几个例子就好多了,谢谢
      

  4.   

    create or replace procedure moveA2B
    as
    var_cur sys_refcursor;
    var_rec A%ROWTYPE;
    begin
    open var_cur for select a1,a2,a3,a4 from A;
    loop
    fetch var_cur into var_rec;
    exit when var_cur%NOTFOUND; insert into B(b1,b2,b3) values (var_rec.a1,var_rec.a2,var_rec.a4);
    insert into B(b1,b2,b3) values (var_rec.a1,var_rec.a3,var_rec.a4); 
    end loop;
    close var_cur;
    dbms_output.put_line('done!');
    exception when others then
    raise;
    end;