需要一点帮助。我正在进行一个运行select的存储过程调用。 (由于业务限制,我无法进入实际选择,但我会给你一个虚拟场景。)
这是一个存储过程:
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。
感谢任何帮助。非常感谢。
答案 0 :(得分:0)
假设表中的列车辆和名称始终不为空,您可以尝试这样的事情:
select *
from myTable tab
WHERE nvl(vehicle, tab.vehicle) = tab.vehicle
AND nvl(name, tab.name) = tab.name
答案 1 :(得分:-1)
试试这个。
SELECT * FROM myTable tab
WHERE tab.vehicle=vehicle
AND IFNULL(tab.name,1) = IF(tab.name IS NULL,1, name)