表Cus_A和表Cus_B的结构完全相同,表Cus_A和表Cus_B中既存在ID相同的记录,也存在ID不同的记录。现要求将ID只存在于表Cus_A中而不存在于表Cus_B中的记录全部插入到Cus_B表中,并用表Cus_A中的记录更新表Cus_B中相同的ID的记录,请写出完成这一功能的存储过程。

解决方案 »

  1.   

    create or replace procedure dddd
    is
    begin
    update Cus_B a
       set (a.col1,a.col2,....) = (select col1,col2,......
                                    from Cus_A
                                   where ID = a.ID);
    --上面的Sql要求ID唯一                           
    insert into Cus_B(col1,col2,....)
        select col1,col2,.....
          from Cus_A
         where ID not in (select ID from Cus_B);end;
      

  2.   

    insert into cus_b values (select * from cus_a where id no in (select id from cus_b where cus_a.id=cus_b.id))update cus_b set name=(select name from cus_a where cus_a.id=cus_b.id) and address=(select address from cus_a where cus_a.id=cus_b.id)注意:id有重复值, 那更新就失败
      

  3.   

    使用游标,将B表中的记录依次取出,取出每条记录时,将B表中的记录与A表中的记录相比较,如果ID相同就更新、如果ID不同就插入。
        另:如果你只需要执行一次这种操作,这段算法可以写在存储过程;如果你需要实时地进行这种操作,即一旦A表中数据有改变(修改、添加等),则就需要上述操作,那你可以将这段算法写在触发器里,这样,你就可以高枕无忧了。
        所需代码编写方法请参考pl/sql语法部分。
        *^_^*