如何参数化字符串的可变长度?
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
我正在编写一个查询,其中 '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