2014-01-17 31 views
-1

收集如何在Oracle PL/SQL中將集合作爲輸出參數傳遞時查看輸出?

create type p_tab_type is table of varchar2(30) ; 

程序

CREATE OR REPLACE PROCEDURE p_jin_proc(p_dept IN emp.mgr%TYPE, 
             name_tab OUT p_tab_type) IS 
    BEGIN 

    SELECT empno BULK COLLECT INTO name_tab 
    FROM emp 
    WHERE mgr = p_dept; 

    END p_jin_proc; 

我無法獲取值出name_tab收集在輸出窗口。

+0

你能告訴我們,你怎麼看/打印輸出? –

回答

2

你必須遍歷您的收藏:

select empno bulk collect into name_tab from emp where mgr = p_dept; 

for i in name_tab.first..name_tab.last loop 
    DBMS_OUTPUT.PUT_LINE(name_tab(i)); 
end loop; 
2

從SQL Developer或SQL * Plus中,你可以這樣做:

var rc refcursor 

declare 
    name_tab p_tab_type; 
begin 
    p_jin_proc(1, name_tab); 
    open :rc for select * from table(name_tab); 
end; 
/

print rc 

執行,由於在SQL Developer中的腳本將顯示resulsts在腳本輸出窗口中。不完全確定這是否是你所指的。

variable聲明一個名爲rc的綁定變量引用遊標。匿名塊調用你的過程,並用集合中的值打開綁定變量。最後print顯示綁定變量的內容。

您也可以編寫一個包裝程序塊來調用您的程序,然後遍歷集合並使用dbms_output顯示每個值,只要您的客戶端顯示該值(如Wernfried所示)即可。

set serveroutput on 
declare 
    name_tab p_tab_type; 
begin 
    p_jin_proc(1, name_tab); 
    for i in name_tab.first..name_tab.last loop 
    dbms_output.put_line(name_tab(i)); 
    end loop; 
end; 
/
相關問題