我试图打印光标记录,但是不能。下面的代码,我已经尝试过。
DECLARE
CURSOR CUR_EMP IS
SELECT *
FROM EMP
WHERE Deptno = &DNO;
V_REC CUR_EMP%ROWTYPE;
BEGIN
OPEN CUR_EMP;
LOOP
FETCH CUR_EMP INTO V_REC;
EXIT WHEN CUR_EMP%NOTFOUND;
DBMS_OUTPUT.PUT_LINE (
'Record No:'
|| CUR_EMP%ROWCOUNT
|| ' '
|| V_REC.ENAME
|| '
'
|| V_REC.SAL);
END LOOP;
CLOSE CUR_EMP;
END;
答案 0 :(得分:1)
如果您像以前那样运行它:
SQL> declare
2 cursor cur_emp is select * from emp
3 where deptno = &dno;
4 v_rec cur_emp%rowtype;
5 begin
6 open cur_emp;
7 loop
8 fetch cur_emp into v_rec;
9 exit when cur_emp%notfound;
10
11 dbms_output.put_line('Record no: ' || cur_emp%rowcount ||' '|| v_rec.ename);
12 end loop;
13 close cur_emp;
14 end;
15 /
Enter value for dno: 10
old 3: where deptno = &dno;
new 3: where deptno = 10;
PL/SQL procedure successfully completed. --> there's no output
但是,如果您启用输出...
SQL> set serveroutput on
SQL>
...然后再次运行该代码:
SQL> /
Enter value for dno: 10
old 3: where deptno = &dno;
new 3: where deptno = 10;
Record no: 1 CLARK --> oh yes, here they are!
Record no: 2 KING
Record no: 3 MILLER
PL/SQL procedure successfully completed.
SQL>
因此,在SQL * Plus(或SQL Developer,甚至可能有更多支持它的工具)中使用set serveroutput on
,或在您的GUI中启用它。因为,该代码应该正确运行(当然,如果满足WHERE
条件)。
另外,请考虑使用游标FOR
循环,因为Oracle执行大部分 dirty 作业(声明游标变量,打开游标,注意退出循环,关闭)很容易维护光标):
SQL> begin
2 for cur_emp in (select rownum rn, e.* from emp e where deptno = &dno) loop
3 dbms_output.put_line('Record no: ' || cur_emp.rn ||' '|| cur_emp.ename);
4 end loop;
5 end;
6 /
Enter value for dno: 10
old 2: for cur_emp in (select rownum rn, e.* from emp e where deptno = &dno) loop
new 2: for cur_emp in (select rownum rn, e.* from emp e where deptno = 10) loop
Record no: 1 CLARK
Record no: 2 KING
Record no: 3 MILLER
PL/SQL procedure successfully completed.
SQL>