create or replace  procedure updatemobileandphone asdeclare  cursor c1 is 
select xm,dh,dh2 from usertemp where 1=1;
begin 
 for cursor1 in  c1
      loop 
      update employeeinfo
      set
      employeeinfo.mobile=cursor1.dh
      employeeinfo.phone=cursor1.dh2
      where employeeinfo.employeename=cursor1.xm;
      end loop;
      
      end;
就是不知道哪里错了,请指教

解决方案 »

  1.   


    -- 一次性更新多列数据,别用 cursor ,太慢了
    update A  
    set (b,c) = (select f,g from B where A.a = B.d)
    where exists(select * from where A.a = B.d)
      

  2.   

    还可以考虑使用merge into的方式实现
    MERGE INTO A
    USING B   
    ON (A.a = B.d)   
    WHEN MATCHED THEN  
    UPDATE  
    SET A.b=B.f,A.c=B.g;
      

  3.   


    -- 一次性更新多列数据,别用 cursor ,太慢了
    update A  
    set (b,c) = (select f,g from B where A.a = B.d)
    where exists(select * from where A.a = B.d)
      

  4.   


    不知道为什么会报错update employeeinfo  
    set (mobile,phone)=(select dh,dh2 from usertemp  where employeeinfo.employeename=usertemp.xm),
    where 
    exists(select * from employeeinfo e ,usertemp where e.employeename=usertemp.xm);
    但是merge into usertemp
    using employeeinfo 
    on (usertemp.xm=employeeinfo.employeename)
    when matched then
    update 
    set usertemp.dh= employeeinfo.mobile, usertemp.dh2=employeeinfo.phone;测试通过,不知道为什么
      

  5.   

    set 这行,最后多了一个 逗号。
      

  6.   


    -- 括号中的子查询,只写一个表名,不要把两个表名都写进去。
    set (b,c) = (select f,g from B where A.a = B.d)-- 你给改下面的格式了(这个写法不对)
    set (b,c) = (select f,g from A,B where A.a = B.d)