oracle - 在 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”语句,它起作用了。我不知道还要检查什么。请帮助,并提前感谢!
解决方案
你有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>
推荐阅读
- javascript - 根据变量 (t/f) 显示 div
- reactjs - react+typescript中的无状态函数组件+prop-types接收组件作为prop?
- python - Firefox 更新后 Selenium (Python3) 不会转到目标 URL
- python - 带复位条件的累计和
- matrix - 是否可以从投影矩阵中获得主点?
- python - AttributeError:“builtin_function_or_method”对象没有属性“翻译”
- prolog - 读取文件,然后将其转换为序言中的列表
- c# - 在具有多个应用程序池的 iis 服务器的根目录运行 C# MVC 应用程序
- xaml - ActionBar 不会消失
- javascript - 对象内的未定义值