首页 > 解决方案 > 在 pl/sql 中使用游标显示数据

问题描述

我已经编写了这段代码来“使用光标显示部门表中的部门名称”

declare
v_dname department.department_name%type;
cursor dept_cursor is select department_name from department;
begin
open dept_cursor;
loop
fetch dept_cursor into v_dname;
exit
when dept_cursor%notfound;
dbms_output.put_line('Department names are :' || v_dname);
end loop;
close dept_cursor;
end;
/

此代码运行良好并显示“过程已创建”,但未显示输出值。我尝试单独运行“dbms_output.put_line”语句,它起作用了。我不知道还要检查什么。请帮助,并提前感谢!

标签: oracleplsql

解决方案


你有SET SERVEROUTPUT ON吗?如果不是字面意思,则在您的 GUI 中启用它。因为,代码本身看起来(并且工作)没问题。我没有你的桌子,但 Scott 的桌子DEPT也可以用于测试。

您的代码,未修改(除了DEPARTMENT更改为DEPT):

SQL> set serveroutput on                  --> did you do this?
SQL>
SQL> declare
  2     v_dname  dept.dname%type;
  3
  4     cursor dept_cursor is select dname from dept;
  5  begin
  6     open dept_cursor;
  7
  8     loop
  9        fetch dept_cursor into v_dname;
 10
 11        exit when dept_cursor%notfound;
 12        dbms_output.put_line ('Department names are :' || v_dname);
 13     end loop;
 14
 15     close dept_cursor;
 16  end;
 17  /
Department names are :ACCOUNTING
Department names are :RESEARCH
Department names are :SALES
Department names are :OPERATIONS

PL/SQL procedure successfully completed.

SQL>

如果它仍然不起作用,请检查 table 是否包含任何行。


还有一件事:你说

此代码运行良好并显示“程序已创建

这实际上不是 Oracle 消息,所以我不确定我是否正确解释了它,但是:如果您实际上创建了一个存储过程(您发布的是一个匿名 PL/SQL 块),则消息说Procedure created。此外,这意味着您必须实际执行它才能获得一些结果。

例如,如果过程的名称是p_show_dept,你会

SQL> set serveroutput on
SQL>
SQL> begin              --> executing the procedure
  2    p_show_dept;
  3  end;
  4  /

Department names are :ACCOUNTING
Department names are :RESEARCH
Department names are :SALES
Department names are :OPERATIONS

PL/SQL procedure successfully completed.

SQL>

推荐阅读