如何识别游标中的一行?

时间:2014-05-26 11:40:11

标签: sql database oracle plsql

光标是否在内部编号?在执行游标FOR循环时,有没有办法识别光标的当前行?

我正在更新表格,我希望在等于当前光标行的行中进行更新。像这样:

DECLARE
  CURSOR c
  is
  -- (...)
BEGIN
  FOR reg IN c
  LOOP
    UPDATE table
       SET column = 'abc'
     WHERE ROWNUM = -- current line of the cursor
  END LOOP;
END;

2 个答案:

答案 0 :(得分:0)

您可以在oracle中使用集合类型而不是游标。 更具体地说,您正在寻找的是逐个表或关联数组。

有关如何使用它们的更多详细信息,请herehere

答案 1 :(得分:0)

WHERE ROWNUM = ?永远不会起作用(除了?= 1)。

ROWNUM在Oracle中的工作方式是它只在实际选择行时才会递增。因此它在达到1之前永远不会达到2(因为"第一个"行的WHERE ROWNUM = 2,所以不能达到2)。

唯一有用的条件是ROWNUM < ?(这并不像你想象的那么有用,因为它是在ORDER BY之前应用的。)


即使它有效,但如果没有ORDER BY,您也会遇到极不可预测的结果。


对于您实际问过的问题,您可以使用光标的%ROWCOUNT属性。

c%ROWCOUNT为您提供到目前为止提取的行数。