使用游标循环

Using a cursor for loop

我在sql中遇到了以下代码语法,但无法弄清楚为什么要这样写。

select distinct tbl.sample_key,ctr.sample_value 
      from tablename tbl where  tbl.Sample_id=CID.sample_id

其中 CID 是 for 循环计数器变量

for CID in (----)

请帮助我理解,因为我是新手,为什么我们要使用它? 这有什么意义?

sample_id 的值是从 游标 for 循环 中的每一行中检索的。这是一个逐行操作,a.k.a。 慢慢来。尽管 for loop 的游标被隐式处理为 bulk collect limit 100,您仍然可以通过将它与 FORALL 语句一起使用来提高性能。

让我们看一个类似于您的代码的 循环游标 的小示例:

SQL> SET serveroutput ON
SQL> DECLARE
  2    cnt NUMBER;
  3  BEGIN
  4    FOR i IN
  5    (SELECT DISTINCT deptno FROM emp
  6    )
  7    LOOP
  8      SELECT COUNT(*) INTO cnt FROM emp WHERE deptno = i.deptno;
  9      dbms_output.put_line('Count of deptno '||i.deptno||' is '||cnt);
 10    END LOOP;
 11  END;
 12  /
Count of deptno 30 is 6
Count of deptno 20 is 5
Count of deptno 10 is 3

PL/SQL procedure successfully completed.