where子句中的Oracle SQL逗号分隔参数

where子句中的Oracle SQL逗号分隔参数,sql,oracle,Sql,Oracle,我的桌子看起来像: +----------+----------+ |stud_id |stud_name | +----------+----------+ |101 |A | |102 |B | |103 |C | |104 |D | |105 |E | +----------+----------+ 我的问题 SELECT * FROM stud

我的桌子看起来像:

+----------+----------+
|stud_id   |stud_name |
+----------+----------+
|101       |A         |
|102       |B         |
|103       |C         |
|104       |D         |
|105       |E         |
+----------+----------+
我的问题

SELECT * FROM students_tbl stud WHERE stud.stud_id IN (:s_id);
当我输入102时,它返回:

+----------+----------+
|stud_id   |stud_name |
+----------+----------+
|102       |B         |
+----------+----------+
正如所料

是否有一种方法可以输入多个值(如102103104)和这样的结果

+----------+----------+
|stud_id   |stud_name |
+----------+----------+
|102       |B         |
|103       |C         |
|104       |D         |
+----------+----------+
您可以将regexp\u substr与connect by一起使用


干杯

下面的查询将要求您输入3个值,您将得到所需的结果

SELECT * FROM students_tbl stud WHERE stud.stud_id IN (:s_id,:s_id1,:s_id2);

您不需要拆分bind变量的值;一个更快的解决方案是查看id加上周围的分隔符是否是bind变量的子字符串,其中包含前导和尾随分隔符:

挑选* 来自学生 其中“,”s|id“,”LIKE“,”stud|id“,”
非常类似于我刚才指出的,这个构造阻止您在stud_id上使用索引。如果表中有几百个学生,可能并不重要。但是,如果表中有几十万名学生,那么这将变得昂贵。如果您真的想这样做,您可以将:s_id作为数字表传递,并使用WHERE stud_id成员:s_id。
SELECT * FROM students_tbl stud WHERE stud.stud_id IN (:s_id,:s_id1,:s_id2);