我使用的是oracle 10g,我的表名是列名firstname,lastname,country和region。
country | region
--------|----------
India | Asia
China | Asia
Ireland | Europe
England | Europe
以下是senarios,
当我们为国家和地区传递“ALL”时,输出查询应为
select * from Test_Table
当我们通过“印度,中国”为国家和“亚洲,欧洲”为区域时,输出查询应该是
select * from Test_Table where counrty in (Malayasia,japan) and region in (Asia , Europe)
如何将其组合到传递值的单个查询中,将非常感谢任何帮助。
答案 0 :(得分:2)
如果将in
作为参数传递,则无法使用select *
from Test_Table
where (:v_countries = 'ALL' or ','||:v_countries||',' like '%,'||country||',%') and
(:v_regions = 'ALL' or ','||:v_regions||',' like '%,'||region||',%');
。最简单的方法是构造一个创建上述查询的查询字符串。这也具有Oracle可以利用查询索引的优势。
您也可以使用字符串操作表达您想要做的事情:
where
但是,我建议您使用应用程序逻辑来创建正确的{{1}}子句,而不是使用此技巧。