我在从游标中获取值到变量时遇到问题:
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_taskn; exit when cur%notfound; end loop; end loop; close cur; end projectinfo;
我检查了我的光标,它包含了我需要的所有值.我的程序编译FINE但不打印任何输出!
解决方法
您使用什么工具来运行程序?默认情况下,大多数工具不会为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输出窗口可见,单击绿色的“加号”图标,然后选择连接以启用dbms_output.