我的任务是制作多个报告,以使用户能够:
我认为使用CASE语句对此很简单,因此我在WHERE中做了以下操作:
SomeTable.SomeField IN (CASE
WHEN :P_ITEM_CLAUSE IS NULL THEN SomeTable.SomeField
WHEN INSTR(:P_ITEM_CLAUSE,',') > 0 THEN ''''||TO_CHAR(replace(:P_ITEM_CLAUSE,',', ''''||', '||''''))||''''
ELSE TO_CHAR(:P_ITEM_CLAUSE) END)
第一个和第三个条件按预期工作,但是第二个条件不返回任何数据。我还使用DUAL分别测试了第二个条件,并且能够获得我在参数中输入的所有值。这是一台Oracle服务器。
答案 0 :(得分:0)
您可以使用like
。像这样:
where :P_ITEM_CLAUSE is null or
',' || :P_ITEM_CLAUSE || ',' like '%,' || SomeTable.SomeField || ',%'
请注意,结果查询将无法使用SomeField
上的索引。