在過程中,如果我的第一個查詢返回空值或不返回記錄,那麼我的第二個查詢必須甚至運行第二個查詢返回空值或返回沒有記錄然後一個默認值必須返回。如何製作這個程序?我應該使用if語句還是異常處理程序?如果我的第一個查詢返回空值,那麼我的第二個查詢必須運行,即使第二個查詢爲空,那麼我的默認值爲
回答
一個這樣做的方法是窩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是常規業務邏輯的一部分,而不是需要處理的異常。我不認爲在異常處理程序中嵌套後續選擇幾乎與商業規則相同。
寫這樣的查詢
select * from tablename
where field1 in nvl(select field1 from table2 ,'defaultvalue')
我收到此錯誤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
oracle沒有isnull()函數,你必須在isull的地方使用nvl() –
我還沒有得到我想要的結果在這裏我的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
- 1. 爲什麼我的第一個查詢的值從我的第二個查詢返回值?
- 2. Oracle DB:如果第一個查詢爲空,則返回第二個查詢
- 3. 爲什麼第一個查詢比第二個查詢快?
- 4. 第二個MDX查詢必須返回第一個MDX查詢返回的每一行的結果
- 5. 查詢返回第二個值,如果有兩個,空,如果只是一個
- 6. 來自第一個查詢返回的第二個查詢的結果
- 7. 如何將第二個查詢「水平化」到我的第一個查詢中?
- 8. 如何我在第二個查詢
- 9. 使用第一個查詢的結果作爲第二個查詢的參數嵌入MS SQL查詢
- 10. 我必須得到查詢結果中的第二大計數
- 11. 從另一個查詢的結果查詢第二個mysql表
- 12. 如何從第一個查詢到第二個查詢的用戶結果
- 13. MYSQL - 如果第一個字段不爲空,那麼更新第二個字段,如果第二個字段不爲空,那麼等
- 14. 爲什麼在第二次運行select查詢時返回NULL
- 15. 如何將第一個查詢(有兩個值)的輸出作爲第二個查詢的輸入?
- 16. MySQL - 將第一個查詢結果合併到第二個查詢的列中
- 17. ASP.NET查詢字符串第二個值
- 18. 返回SQL查詢的每第二行
- 19. Dense_rank在第二個查詢
- 20. 查詢從第二個表
- 21. 多個查詢與SQLite第二個查詢只給出第一個結果
- 22. 在PHP的第二個查詢中使用來自一個mysqli查詢的值
- 23. 改寫爲一體的MySQL查詢,其中第一個查詢的結果需要第二次查詢
- 24. 貓鼬:在返回的文檔運行第二個查詢
- 25. 如何使用從第一查詢結果中第二個查詢
- 26. 如果在一個查詢中第一個爲空,如何獲得SELECT的第二個結果?
- 27. 爲什麼我的Mongoose查詢在循環中只返回第一個結果?
- 28. 我有2個查詢,我想使用第一個查詢的結果
- 29. Mysql子查詢作爲輸入的第二個查詢
- 30. SQL:如果第一個查詢沒有返回任何行,則調用第二個查詢
非常感謝。你的代碼幫助了我。 – leelavinodh