不会重新查询TABLE_A表的。
oracle会把所有的数据取出来的。

解决方案 »

  1.   

    首先呢
    你应该是把 FROM 错写成 FORM 了吧
    后边的看不清楚了
    如果时一张表直接UPDATE就行
      

  2.   

    请按步就班地学习update和游标方面的知识,不能一蹴而就。
      

  3.   

    如果能用Sql语句搞定效率还是比较高
      

  4.   

    楼主,当你的游标定义了以后,就不会根据表数据变化而变化了,除非你重新open后
      

  5.   

    (1)
    CURSOR CUR_A
        SELECT
          ....
        FROM
            TABLE_A
        WHERE X = 'AAA'FOR REC_A IN CUR_A LOOP
        UPDATE
            TABLE_A
        SET
        ...
        WHERE
            X = REC_A.X --//此处象更新的是REC_A所指向的记录
    END LOOP(2)
        UPDATE
            TABLE_A
        SET
            ...
        WHERE 
            X = 'AAA'这么说(1)和(2)没什么区别乐?
      

  6.   

    不太明白。
    如果 X 是唯一索引,那么WHERE X = 'AAA'只有一条纪录。
    如果 X 不是,
        WHERE
            X = REC_A.X --//此处象更新的是REC_A所指向的记录
    对于每一条纪录都要更新多个纪录,
    这里 X 到底是不是一个?
      

  7.   

    从条件看是没什么分别,只是不知set的值是否也一样?若set的值在循环中不断变化,那么就是有区别的了。
      

  8.   

    谢谢上面各位^^    UPDATE
            TABLE_A
        SET
            ...
        WHERE
            X1 = 'BBB' 
    这样不是查询表,找出满足条件的数据再UPDATE么?是这样么FOR REC_A IN CUR_A LOOP
        UPDATE
            TABLE_A
        SET
            ...
        FORM
            X = REC_A.X   -- KEY
    END LOOP这样的UPDATE,是不用重新查询表了么?