2011-10-31 67 views
0

我必須通過Oracle Adf中的ViewObject運行兩個查詢中的一個。這是基於我可能會或可能不會輸入組碼的條件。第一個查詢在用戶不輸入任何參數時處理場景,而第二個查詢在用戶輸入組代碼時處理場景。取決於用戶是否輸入參數,我必須運行以下查詢。我將只使用一個視圖對象。如何根據Oracle 10g中的Condition執行兩個查詢之一?

1.SELECT IIM.index_num ,IIM.description FROM inv_item_mst IIM WHERE IIM.group_cd IN(:GroupCode1,:GroupCode2,:GroupCode3,:GroupCode4,:GroupCode5,:GroupCode6,:GroupCode7) AND IIM .generic_cd LIKE NVL(:generic_cd_param, '%') AND IIM.supplier_cd LIKE NVL(:supplier_cd_param, '%')

2.SELECT IIM.index_num ,IIM.description FROM inv_item_mst IIM WHERE IIM。 group_cd =:groupCd

+0

爲什麼你只使用一個視圖對象? – GolezTrol

+0

它必須是我想的一個視圖對象,因爲第一個查詢的輸出由應用程序處理。也就是說,GroupCode1 ... GroupCode7是從用戶登錄中獲取其值的jhs參數。現在,有7個可能的組碼,並且用戶A被允許訪問組1,2和3.因此,他可以選擇1,2和3,並且他可以選擇任何組。根據這個選擇,第二個查詢應該執行,應該只給我屬於輸入組的索引號碼 –

回答

1

Since你是從同一個表中選擇相同的列只是OR條件結合起來,語句的WHERE子句檢查,如果:groupCd值存在:

SELECT IIM.index_num, IIM.description 
FROM inv_item_mst IIM 
WHERE (:groupCd IS NOT NULL AND IIM.group_cd =:groupCd) 
OR (:groupCd IS NULL AND 
    IIM.group_cd IN (:GroupCode1,:GroupCode2,:GroupCode3,:GroupCode4,:GroupCode5,:GroupCode6,:GroupCode7) 
    AND IIM.generic_cd LIKE NVL(:generic_cd_param,'%') 
    AND IIM.supplier_cd LIKE NVL(:supplier_cd_param,'%') 
    ) 
+0

非常感謝。完善 –