B表包含A表  A(a,b) B(a,b,c,d)从A表取出字段放入B表,每插入一条还将c,d相应的字段填入(从其他表取出,获经过计算得到)应该如何?... 我只知道insert into ** select ……,一次是一整条

解决方案 »

  1.   


    create or replace insert_to_tb2
    as
    v_a tab1.a%type;
    v_b tab1.b%type;
    v_c tab3.c%type;
    v_d tab3.d%type;
    cursor cur_tab is select a,b,c,d from tab1,tab3
    begin
    open cur_tab;
    loop
    fetch cur_tab into v_a,v_b,v_c,v_d;
    exit when cur_tab%nofound;
    insert into tab2(a,b,c,d) values(v_a,v_b,v_c,v_d);
    end loop;
    close cur_tab;
    end 
      

  2.   

    谢谢,用光标做好象是唯一来从结果集中取数据的方法?那么如果是在存储过程中间执行一个select * from A,B where A.a = B.b返回一行结果,需要从中取数据
    不能在declare里显式声明光标(因为where条件不确定)该如何查询?
      

  3.   

    OPEN CUROSR FOR 'SELECT F1,....Fn from tbl_name'(在这儿拼sql语句)
    loop
    ...
    end loop;
      

  4.   

    Thanks不好意思再问一下如果只是一条记录,没必要用loop呢我是想从B连接到A,查出一条记录,里面一个boolean值,我在后面的if语句中拿来作判断怎么把这条记录的这个boolean字段值取出来呢
      

  5.   

    A(a,b) B(a,b,c,d)----
    把你计算c,d 的过程写成函数,然后:INSERT INTO B (a,b,c,d)
    SELECT a,b,函数1 as c,函数2 as d
    FROM A;COMMIT;
      

  6.   

    非常谢谢!~
    我把select的结果保存到相同结构的记录中另外,PL\SQL的procedure中不知有没有临时变量,感觉好象所有的变量都要在最开始的declare中声明