2013-02-13 62 views
0

我已經創建了一個存儲過程來搜索員工姓名,但是我希望它是開放式的,這樣用戶就可以插入第一個或最後一個名字,或者根本沒有名字..只是想知道如何爲此構造邏輯。存儲過程PLSQL中的條件選擇?

基本上像下面這樣..我希望它跳過檢查名稱,如果它爲空。下面的線應該工作嗎?或者我搞砸了。謝謝。

search_employe(name, type) 

SELECT * FROM employee_table e 
WHERE e.type = type 
AND IF name is not null THEN e.FNAME = name OR e.LName = name END IF 
AND {...} 

回答

1

選擇不需要任何PLSQL,而是「插入」原帖會談,因此可能需要一些澄清 - 你的意思,傳遞參數?

SELECT * FROM employee_table e 
WHERE e.type = type 
AND (name is null OR e.FNAME = name OR e.LName = name) 

我認爲這讓人很沒有意義/非常混亂,有在調用者傳遞一個名字相匹配的存儲過程,但你也回誰沒有對他們的註冊名稱的任何員工,和考慮一下比賽。如果你真的想回到這種混亂的數據(QA將有一個重要的日子),那麼它可以做到:

SELECT * FROM employee_table e 
WHERE e.type = type 
AND 
(
    -- matching names, or the value was passed in null 
    (name is null OR e.FNAME = name OR e.LName = name) 
    OR 
    -- value passed in, but the employee has no registered name 
    (name is not null AND e.FNAME is null AND e.LName is null) 
) 

但我真的建議,這又回到了繪圖板來了解的要求和誠信數據。

+0

嗯,但如果名稱不爲空,並且姓名未知,該怎麼辦? – 2013-02-13 23:30:09

+0

你如何/爲什麼要存儲未知名和姓的員工?如果編寫得當,使用AND/OR條件的相同技術也可以工作,在查詢中不需要IF語句(或者更確切地說是case語句)。 – Andrew 2013-02-13 23:32:27

+0

好吧,如果你有一個員工ID但沒有名字,假設你可以根據什麼類型的搜索有多個選擇。 – 2013-02-13 23:36:04