同时将B中主键重复的记录“剪切”到A中,A_ID和A_Type用传入的数据
---------
不理解!
说的详细一些最好有demo数据 以及 想要达到的效果

解决方案 »

  1.   

    传入A_ID和A_Type,把在A中与A_ID和A_Type匹配的记录“剪切”到B中,理解
    但是主键重复,A_ID和A_Type用传入的数据,不理解?
      

  2.   

    就拿上面的数据说吧。我传入A_ID:2   A_Type:CC,查询A表,获得ID是3的那条记录,然后我就把这条记录插入到B表(舍弃A_ID和A_Type)并在A表中删除这条记录,同时B表中已经有了ID是3的字段,我再把B表中ID是3的记录插到A表。不知道我表达的是否明白?!!哎~~~后悔当初没好好学语文!
      

  3.   

    DEMO:
    操作前:
    A:
    A_ID  A_Type  ID   Name ......
    ----------------------------------
     1       AA    1    zhao
     1       BB    2    qian
     1       BB    3    sun
     1       CC    3    liB:
                  ID   Name ......
    -----------------------------------
                   1   ZHOU
                   2   WU
                   3   ZHENG
                   4   WANG操作后:
    A:
    A_ID  A_Type  ID   Name ......
    ----------------------------------
     1       AA    1    zhao
     1       BB    2    WU
     1       BB    3    ZHENG
     1       CC    3    liB:
                  ID   Name ......
    -----------------------------------
                   1   ZHOU
                   2   qian
                   3   sun
                   4   WANG
      

  4.   

    由于在A表总,A_id,A_type,ID,构成联合主键,因此只传A_id,A_type,肯定会得到多条记录的,所以不用游标,用临时表或者用RECORD结构都行,可以根据在A中的数据集合,循环查找B中的记录,有相同的,就把它保存在临时表或record结构中,然后删除B中的记录,知道循环完成,然后将A中查到的记录一次行更新到B中,然后删除A中这些记录,最后将临时表或record结构中的数据插入到A中即可
      

  5.   

    create PROCEDURE rep(m varchar2,n varchar2) IS
    x   v1%rowtype;
    y   v2%rowtype;
    BEGIN
    select * into x from a where A_ID = m and A_Type = n;
    select * into y from b where id = x.id;
    delete from a where A_ID = m and A_Type = m;
    delete from b where id = x.id;
    insert into a values(m,n,y.id,y...);
    insert into b values(x.id,x......);
       EXCEPTION
         WHEN OTHERS THEN
           Null;
    END;
      

  6.   

    B主键怎么可能重复?不知道楼主的意思
    匹配A中的A_ID 和A_TYPE到B中:
    ...
    V_SQLSTRING:='insert into B(column list) select column list from A WHERE A_ID=:A_ID AND A_TYPE=:A_TYPE';
    EXECUTE IMMEDIATE V_SQLSTRING USING YOUR_A_ID,YOUR_A_TYPE;
    COMMIT;
    ...
      

  7.   

    呵呵,多谢 wfeng7907(无风) ,我就是这个意思。不过你的方法好象只能处理单条记录,我已经解决了,用临时表。谢谢大家!