各位:请耐心点哦,呵呵表tbl_phone_base 的字段phoneid、phone   数据有上千万
表tbl_phone_baseaaa 的字段 phoneid、phone   数据有上十万(子表)
根据phondid相等,要将表tbl_phone_baseaaa字段phone的数据更新到tbl_phone_base表的phone里面去,怎样写这个存储过程?
谢谢大家

解决方案 »

  1.   

    描述不清
    1\各表通过哪个字段(组合)能为一确定一条数据,例如主键,你没提供
    2\你保证tbl_phone_baseaaa 的字段 phoneid在tbl_phone_base 都有对应,如果找不到对应的你怎么处理?
    根本用不到存储过程,1个sql足够了
    下述是把两表中有对应phoneid的更新
    update tbl_phone_base
    set phone=(select phone  from tbl_phone_baseaaa  where phoneid=tbl_phone_base.phoneid)
    where exists(select 1  from tbl_phone_baseaaa  where phoneid=tbl_phone_base.phoneid)
    注意,因为大批量处理,执行更新前先做备份
    多备份永远不是坏事
      

  2.   


    所言既是呀, 上面的sql就可以搞定你的要求了, 或者是,你需要procedure是有其他的考虑。
      

  3.   

    数据太多,用一个SQL要很长时间的,保证都有对应
      

  4.   


    create or replace procedure update_phone as CURSOR C_all  IS
       SELECT phoneid,phone from tbl_phone_baseaaa;  v_phone tbl_phone_baseaaa.phone%type;
     v_phoneid tbl_phone_baseaaa.phoneid%type; begin 
     
        OPEN  C_all;
        LOOP 
            FETCH C_all INTO  v_phoneid,v_phone;
             EXIT WHEN C_all%NOTFOUND;  
             
             begin
                              
                update tbl_phone_base set phone=v_phone where phoneid=v_phoneid; 
                            
             end; 
                           
        END LOOP;
        close  C_all; 
       commit;
           
     end update_phone;
    /
      

  5.   


    这个也没有分批commit呀,应该不推荐你这样的写法,还不如sql
      

  6.   


    这个效率肯定很差!不推荐!还不如直接UPDATE
      

  7.   

    试下这个效率如何:Create Table tmp_table
    As
    Select t1.phoneid, t2.phone From tbl_phone_base t1, tbl_phone_baseaaa t2 Where t1.phoneid = t2.phoneid;Truncate Table tbl_phone_base;Insert Into tbl_phone_base
    Select * From tmp_table;
    Commit;Drop Table tmp_table;