2013-08-23 30 views
4

我有問題,從獲取光標值到變量:如何從遊標中獲取值到變量中?

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; 

我檢查了我的光標和itdoes包含了我需要的所有值。我的程序編譯FINE但不打印任何輸出!

回答

6

你用什麼工具來運行你的程序?默認情況下,大多數工具不會爲dbms_output分配緩衝區來寫入,也不會顯示寫入dbms_output的任何內容。這就是爲什麼你永遠不會依賴於dbms_output任何真正的代碼。

如果您在使用SQL * Plus,你需要的,如果你使用的是圖形用戶界面執行你的程序

SQL> set serveroutput on; 
SQL> exec projectinfo(<<some number>>); 

前啓用serveroutput,圖形用戶界面,幾乎可以肯定的方式,使dbms_output。但是,對於不同的應用程序來說,這將會非常不同例如,在SQL Developer中,您需要確保DBMS Output窗口可見,請單擊綠色的「加號」圖標,然後選擇您的連接以啓用dbms_output

相關問題