我在将光标中的值提取到变量时遇到问题:
create or replace
procedure projectinfo(num clubs.clubid%type)
as
--identify variables
p_cln clubs.clubname%type;
p_projn projects.projectname%type;
p_projnum number;
p_taskn tasks.taskname%type;
p_tasknum number;
cursor cur is
select c.clubname, p.projectname, t.taskname
from clubs c join projects p on c.clubid=p.clubid
join tasks t on t.projectid=p.projectid
where c.clubid=num;
--I have checked the above cursor and it's worked fine!!!
begin
p_projnum:=0;
p_tasknum:=0;
open cur;
loop
fetch cur into p_cln,p_projn, p_taskn;
dbms_output.put_line(p_cln|| ' ' ||p_projn|| ' ' || p_taskn);
-- the above command does not print variable values!!!
exit when cur%notfound;
p_projnum:=p_projnum+1;
dbms_output.put_line(' ************************ ');
dbms_output.put_line(' club name : ' ||p_cln);
dbms_output.put_line( ' project ' ||p_projnum|| ' ' || p_projn);
loop
p_tasknum:=p_tasknum+1;
dbms_output.put_line('Task: ' ||p_tasknum|| ' ' || p_taskn);
fetch cur into p_cln,p_projn, p_taskn;
exit when cur%notfound;
end loop;
end loop;
close cur;
end projectinfo;
我检查了我的光标,它包含了我需要的所有值。我的程序编译FINE但不打印任何输出!!!
答案 0 :(得分:6)
您使用什么工具来运行程序?默认情况下,大多数工具不会为dbms_output
分配缓冲区来写入,也不会显示写入dbms_output
的任何内容。这就是为什么你永远不会依赖dbms_output
来获取真正的代码。
如果您使用的是SQL * Plus,则需要在执行程序之前启用serveroutput
SQL> set serveroutput on;
SQL> exec projectinfo( <<some number>> );
如果您使用的是GUI,GUI几乎肯定能够启用dbms_output
。但对于不同的应用来说,这将是非常不同的。例如,在SQL Developer中,您需要确保DBMS Output
窗口可见,单击绿色的“加号”图标,然后选择您的连接以启用dbms_output
。