通过附加选择vs Fetch Into循环游标

时间:2016-08-31 19:09:30

标签: sql oracle plsql

我当前的方法类似于

var_row_output tablename%rowtype;

cursor main_cur IS
   SELECT id 
   FROM tablename;

BEGIN
FOR rec in main_cur LOOP
   SELECT * 
   INTO var_row_output
   FROM tablename
   WHERE id= rec.id;

-- do stuff
End Loop;
END;

选择像

这样的东西会更好吗?
var_row_output tablename%rowtype;

cursor main_cur IS
   SELECT * 
   FROM tablename;

BEGIN
LOOP
   FETCH main_cur into var_row_output;
   EXIT WHEN main_cur%NOTFOUND;
   --do stuff
END LOOP;
END;

我们一般在我的工作场所采用第一种方法来处理游标。我很好奇是否有这样的表现受到打击?哪种方式更可取?

1 个答案:

答案 0 :(得分:2)

在第一个示例中,您在循环的每次迭代中执行额外的select,这可能会在一定程度上影响性能。此外,在第二个示例中,代码更简洁。但我也更喜欢使用隐式游标的for循环,如下所示:

begin
  for myrow in (select * from tablename) loop
    null; -- do stuff with myrow
  end loop;
end;