有没有一种方法可以在与字段中所有条目匹配的字段上使用where子句构造参数化查询。例如,我想象的语法像
'select brands from cars where brands = param'
使得如果param = 'Toyota'
则其仅返回与Toyota匹配的行,但如果param = *
则其返回来自cars
表的所有行。
试试这个。这是一个条件WHERE
子句
WHERE brands = NVL(param, brands)
表示如果参数为NULL
,则使用brands = brands
通常的解决方法是
select brands from cars where brands LIKE param
如果param="Toyota",则只返回Toyota
如果param="%",则返回所有
简单但不一定是表演性的。
select * from cars where brands like '%'||parameter||'%'
您可以使用distinct
从您的表中获取所有品牌。
如果您有一个变量,您可以执行:
where v_brand is null or v_brand = brand
如果你只想要一个匹配所有内容的表达式:
where 1 = 1
无论brand
如何,返回所有行的正确方法是从过滤器中删除brands = param
,而不是在其上使用通配符或函数…
在您的案例中,通常会将where 1=1
添加到子句中,并在以下模式中使用:
如果param
具有值
select brands from cars where 1=1 and brands = param
否则,您只需删除and brands = param
部分:
select brands from cars where 1=1