光标是否在内部编号?在执行游标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;
答案 0 :(得分:0)
答案 1 :(得分:0)
WHERE ROWNUM = ?
永远不会起作用(除了?= 1)。
ROWNUM在Oracle中的工作方式是它只在实际选择行时才会递增。因此它在达到1之前永远不会达到2(因为"第一个"行的WHERE ROWNUM = 2,所以不能达到2)。
唯一有用的条件是ROWNUM < ?
(这并不像你想象的那么有用,因为它是在ORDER BY
之前应用的。)
即使它有效,但如果没有ORDER BY
,您也会遇到极不可预测的结果。
对于您实际问过的问题,您可以使用光标的%ROWCOUNT
属性。
c%ROWCOUNT
为您提供到目前为止提取的行数。