假设我有以下数据库:
T1 (a, b, c), T2 (a, c, d)
我想用下面的方式创建一个block:
<>之前宣布光标信息是选中b, d从T1到T2在T1。a = T2。a和T1.c = T2.c开始打开信息For temp in info (x)dbms_output。Put_line (temp.b || temp.d);结束循环关闭信息在游标内的变量上运行是否合法?因为我知道写一个for循环是没有意义的当有游标时…但是它能编译吗?
非常感谢:)
是的,为什么你做不到呢?它是一个参数化的游标。参见代码中的注释。
SQL> set serveroutput on
SQL>
SQL> declare
2 l_deptno dept.deptno%type; --> will be used in a cursor
3
4 cursor info (par_deptno dept.deptno%type) is --> parametrized cursor
5 select d.dname, e.ename
6 from emp e join dept d on d.deptno = e.deptno
7 where d.deptno = par_deptno; --> use it here
8 begin
9 l_deptno := 20;
10
11 for temp in info (l_deptno) loop
12 dbms_output.put_line(temp.dname ||' '|| temp.ename);
13 end loop;
14 end;
15 /
RESEARCH SMITH
RESEARCH JONES
RESEARCH SCOTT
RESEARCH ADAMS
RESEARCH FORD
PL/SQL procedure successfully completed.
SQL>
如果您在游标FOR
循环中使用它,您不必打开游标,声明游标变量(以保存结果),注意何时退出循环或关闭游标- Oracle会为您做这些。
因此,你所说的:
当存在游标
时,没有必要进行for循环
是完全错误的