具有用户定义参数的SQL CASE

时间:2019-03-13 14:42:50

标签: sql oracle

我的任务是制作多个报告,以使用户能够:

  1. 不输入任何内容并获取所有相关数据
  2. 过滤一个或多个数据(用逗号分隔)

我认为使用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服务器。

1 个答案:

答案 0 :(得分:0)

您可以使用like。像这样:

where :P_ITEM_CLAUSE is null or
      ',' || :P_ITEM_CLAUSE  || ',' like '%,' || SomeTable.SomeField || ',%'

请注意,结果查询将无法使用SomeField上的索引。