游标用for循环时不需要显式的打开、关闭、取数据、测试数据的存在、定义存放数据的变量等等,游标FOR 循环的语法:FOR record_name IN
(corsor_name[(parameter[,parameter]...)]
| (query_difinition)
LOOP
statements
END LOOP; 所以做如下修改:
declare
   CURSOR jpPDM IS

  -- 可以不需要显示声明变量
  -- updateitem jpPDM%ROWTYPE;
begin
--不需要显式的打开游标
--open jpPDM;
FOR updateitem IN jpPDM LOOP
  -- 不需要显式的取数据
  --FETCH jpPDM INTO updateitem;
  -- 不需要测试数据的存在与否
  --if jpPDM%NOTFOUND
  --  THEN
  --    EXIT;  --else
        update em_item a set a.item_jp=updateitem.objectname,a.item_en=updateitem.drawingnameb
        where a.rev = updateitem.rev and a.itemcd =updateitem.partsno;
        commit;
  --end if;
END LOOP;
end;

解决方案 »

  1.   

    或者把游标for 循环语句去掉,用普通的方法:open jpPDM;
    --FOR updateitem IN jpPDM LOOP
    loop  FETCH jpPDM INTO updateitem;  EXIT WHEN c_emp%NOTFOUND;  update ...
      ...end loop;close jpPDM;
      

  2.   

    我用的是oracle8.1.7,这样也可以吗?
      

  3.   

    FOR updateitem IN jpPDM LOOP
    改为
    LOOP
      

  4.   

    --最好用loop這種寫法.
    open jpPDM;
    loop  FETCH jpPDM INTO updateitem;  EXIT WHEN c_emp%NOTFOUND;  update ...
      ...end loop;
     commit;
    close jpPDM;