2011-12-01 35 views

回答

2

一個這樣做的方法是窩IF語句,像這樣:

create or replace function get_queue_id 
    (p_product_code in mo_product_master.product_code%type 
    , p_intermediary_code in intrfc_intermediary_mstr_view.intermediary_code%type) 
    return mo_product_master.queue_id%type 
as 
    return_value number; 
begin 
    -- preferred_choice 
    begin 
     select pm.queue_id 
     into return_value 
     from mo_product_master pm 
     where pm.product_code=p_product_code 
    exception 
     when no_data_found then 
      null; 
    end; 

    if return_value is null then 
     -- second_choice 
     begin 
      select qim.queue_id 
      into return_value 
      from mo_queue_inter_map_master qim 
       , intrfc_intermediary_mstr_view imv 
      where qim.category_code =imv.category_code 
      and imv.intermediary_code=p_intermediary_code; 
     exception 
      when no_data_found then 
       null; 
     end; 

     if return_value is null then 
      -- default_value 
      select id 
      into return_value 
      from mo_queue_master 
      where queue_name='others' 
      and status='Active'; 
     end if; 
    end if; 
    return return_value; 
end; 
/

這是一個有點笨拙,但它的工作。

通常不推薦抑制NO_DATA_FOUND異常,但我認爲它適合這種情況:找不到第一個QUEUE_ID是常規業務邏輯的一部分,而不是需要處理的異常。我不認爲在異常處理程序中嵌套後續選擇幾乎與商業規則相同。

+0

非常感謝。你的代碼幫助了我。 – leelavinodh

0

寫這樣的查詢

select * from tablename 
    where field1 in nvl(select field1 from table2 ,'defaultvalue') 
+0

我收到此錯誤ORA-00936:缺少表達,而我試圖執行這個查詢 SELECT pm.queue_id FROM mo_product_master下午 WHERE pm.product_code =:PRODUCT_CODE 和pm.queue_id在爲NULL (SELECT qim.queue_id FROM mo_queue_inter_map_master QIM, intrfc_intermediary_mstr_view IMV WHERE QIM.CATEGORY_CODE = imv.category_code AND imv.intermediary_code =:intermediary_code, 選擇從mo_queue_master id其中QUEUE_NAME = '人' 和狀態= '活動'); – leelavinodh

+0

oracle沒有isnull()函數,你必須在isull的地方使用nvl() –

+0

我還沒有得到我想要的結果在這裏我的sql語句MyFirstQuery是 SELECT pm.queue_id FROM mo_product_master pm WHERE pm.product_code =:product_code ; 如果我的第二個查詢沒有返回任何記錄,那麼我的第二個查詢輸出應該顯示爲 SELECT qim.queue_id FROM mo_queue_inter_map_master QIM,intrfc_intermediary_mstr_view IMV WHERE QIM.CATEGORY_CODE = imv.category_code AND imv.intermediary_code =:intermediary_code; 如果我以前的查詢未能返回記錄,則應顯示我的第三個查詢輸出 從mo_queue_master中選擇ID,其中QUEUE_NAME ='others'和status ='Active'; – leelavinodh

相關問題