如何参数化字符串的可变长度?

How to parameterise variable length of Strings?

我正在编写一个查询,其中 'batch_name' 是参数,有时我只得到一个批次名称,有时我得到 2 个或更多批次名称。我如何在 Oracle BI Publisher 查询中处理这个问题,

这是我的查询,

Select * from pay_batch_headers pbh Where UPPER(pbh.batch_name) = UPPER(:p_batch_name)

现在这个查询将只处理一个批次名称,我希望它处理多个批次名称。

类似于Where UPPER(pbh.batch_name) IN ('Batch1','Batch2','Batch3') 但是使用 IN 子句的问题是我无法预测我必须查询的批次数。任何人都可以帮助我吗?

你有两个选择。一种是将变量组合成一个字符串并使用某种方法,例如 regexp_like():

where regexp_like(upper(pbh.batch_name), ??)

参数字符串应如下所示:'^abc|def|ghi|jkl$'。想做多久就做多久。

另一种方法是使用execute immediate。使用 IN 将值作为字符串转储到 SQL 查询中。这种方式的好处是可以更方便的使用indexes