是否可以在SQL游标内的变量上运行?



假设我有以下数据库:

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循环

是完全错误的

最新更新