使用游标循环
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.
我在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.