在绑定参数中传递了多个值
Posted
技术标签:
【中文标题】在绑定参数中传递了多个值【英文标题】:passed multiple values in the bind parameter 【发布时间】:2021-08-27 14:28:54 【问题描述】:我正在运行以下查询,但它不工作
select * From table r where account_id = 1111 and phone_number
in ( :phone )
我传递了这些值
(1111111111,2222222222,3333333333)
但它没有返回任何结果。如果我只通过其中一个,它确实会返回结果。
【问题讨论】:
有多种方法可以解决这个问题,但首先,各个值来自哪里以及如何构造单个绑定值(CSV 字符串)?如果您可以使用集合而不是字符串,那么它会更简单;或者如果它们来自同一个数据库,那么您可能完全可以避免使用变量。 值来自 GUI 【参考方案1】:你可以使用:
select /*+ full(r) parallel(r,8) */
*
From table_name r
where account_id = 1111
and ','||:phone:||',' LIKE '%,'||phone_number||',%'
关于您的查询:
但它没有返回任何结果。如果我只通过其中一个,它确实会返回结果。
绑定变量是单个字符串而不是字符串列表,因此您的查询相当于:
select /*+ full(r) parallel(r,8) */
*
From table_name r
where account_id = 1111
and phone_number in ( '1111111111,2222222222,3333333333' );
这不是您预期的查询:
select /*+ full(r) parallel(r,8) */
*
From table_name r
where account_id = 1111
and phone_number in ( '1111111111','2222222222','3333333333' );
由于该表不包含与字符串 '1111111111,2222222222,3333333333'
匹配的电话号码,因此它返回零行。
【讨论】:
以上是关于在绑定参数中传递了多个值的主要内容,如果未能解决你的问题,请参考以下文章