需要一點幫助。我正在運行一個選擇的存儲過程調用。 (我不能把在實際的選擇,由於業務上的限制,但我會給你一個虛擬場景。)如果參數值爲空或空白,如何在where子句中跳過條件檢查?
下面是一個存儲過程:
Procedure checkData (name IN VARCHAR2, vehicle IN VARCHAR2, retval OUT VARCHAR2, retdata OUT returnData)
它裏面選擇從一個文本框中輸入域獲得值用於搜索。選擇是這樣的,
select *
from myTable tab
WHERE tab.vehicle = vehicle
AND tab.name = name
現在是什麼的問題是當用戶指定唯一一個出上述2的值,因爲它試圖基於AND
條件檢查的詳細信息,搜索失敗
例如,如果用戶只提供車輛價值,比如說'BMW'
,那麼結果應該包含車輛的所有條目。但是,由於用戶未提供名稱值,因此它會將其作爲''
或null,並且查詢不會返回任何內容,因爲它沒有找到任何匹配name = ''
條件的數據。
於是,我就在下面,
select *
from myTable tab
WHERE tab.vehicle = vehicle
AND IF name IS NOT NULL OR name != ''
tab.name = name
,但它說,
ORA-00920:無效的關係運算符。
那麼我能做些什麼來跳過第二次檢查,如果name的值是null或''。在這種情況下,我只想跳過第二次檢查並僅根據車輛值返回結果。
我不能使用OR
條件,因爲當兩個參數都可用時,我也需要獲得完全匹配。我正在使用Oracle DB。
任何幫助表示讚賞。非常感謝。
把一些(1)調試我來了之後就知道該值不爲空其實。它始終以''(空白/空) – WebNoob
'varchar2'在Oracle數據庫中空字符串與'null'相同。目前還不清楚你的意思是不是空白,而是空白/空白。這是在客戶端應用程序? –
對不起,我感到困惑。但問題現在已經解決了。下面是我用它來工作,'select * from myTable tab WHERE tab.vehicle = vehicle AND tab.name like'%'|| UPPER(name)||'%'' – WebNoob