2014-05-20 29 views
2
create or replace function get_ware_house_master(p_WAREHOUSE_IDS in varchar2) 
    return id_wh_id 

is 
    l_warehouse_list id_wh.id := id_wh_id(); 
    str varchar2(300);   
begin 

    str := 'SELECT BM(w.wh_id)  
      FROM pod_place_warehouse_mapping_tb W 
      where (W.wh_id IN (' ||p_WAREHOUSE_IDS || '))'; 

    execute immediate str bulk collect into l_warehouse_list; 

    for i in l_warehouse_list.first..l_warehouse_list.last loop 
     dbms_output.put_line(l_warehouse_list(i).wh_id);  
    end loop;  

    return l_warehouse_list; 
end get_ware_house_master; 

如何處理它們是不存在的表,我需要使用,如果l_warehouse_list = null然後dbms_output('No DATA FOUND')但如果數據不存在在函數中提到的表,我得到以下錯誤數據:當我提供i/p時執行該函數[參數不在表中我得到錯誤;否則被執行]

numeric or value change error

+0

您是否嘗試處理無數據異常? – user3489875

+0

請編輯您的問題並提供有關您所看到的錯誤的信息。謝謝。 –

+0

是的,我已經使用過,但儘管如此,我得到錯誤ora 06502值或數字錯誤,如果數據不存在,如果我使用時,其他人被處理,但我必須使用no_data,因爲我需要顯示一個o/p狀態時no_data_found – user3653524

回答

0

您可以使用count()功能上你那個集合:

create or replace function get_ware_house_master(p_WAREHOUSE_IDS in varchar2) 
    return id_wh_id 
is 
    l_warehouse_list id_wh.id := id_wh_id(); 
    str varchar2(300);   
begin 

    str := 'SELECT BM(w.wh_id)  
      FROM pod_place_warehouse_mapping_tb W 
      where (W.wh_id IN (' ||p_WAREHOUSE_IDS || '))'; 

    execute immediate str bulk collect into l_warehouse_list; 

    if l_warehouse_list.count() >0 then 
     for i in l_warehouse_list.first..l_warehouse_list.last loop 
     dbms_output.put_line(l_warehouse_list(i).wh_id);  
     end loop;  
    else 
     dbms_output.put_line('No data'); 
    end if; 

    return l_warehouse_list; 
end get_ware_house_master; 

這裏是如何來說明最新的很少簡化,將鱈魚e:

CREATE OR REPLACE TYPE id_wh_id AS TABLE OF VARCHAR2(100); 

create or replace function get_ware_house_master(p_WAREHOUSE_IDS in varchar2) 
    return id_wh_id 

is 
    l_warehouse_list id_wh_id := id_wh_id(); 
    str varchar2(300);   
begin 

    str := 'SELECT * from dual where ''a''=''' ||p_WAREHOUSE_IDS || ''''; 
     dbms_output.put_line(str); 
    execute immediate str bulk collect into l_warehouse_list; 


if l_warehouse_list.count() >0 then 
    for i in l_warehouse_list.first..l_warehouse_list.last loop 
     dbms_output.put_line(l_warehouse_list(i));  
    end loop;  
else 
    dbms_output.put_line('No data'); 
end if; 

    return l_warehouse_list; 
end get_ware_house_master; 
/

-- and call to the function: 
      select get_ware_house_master('sbi') from dual 
union all select get_ware_house_master('a') from dual 
; 
相關問題