如何在Oracle PL/SQL中传递逗号分隔的字符串,并遍历它来执行查询

本文关键字:字符串 分隔 遍历 查询 执行 PL Oracle SQL | 更新日期: 2023-09-27 18:11:27

我有一个Id(字符串)列表。我想删除这样的记录:

DELETE FROM MyTable WHERE ID=:Id

但是,我不想重复调用DB;相反,我希望将Id集合作为逗号分隔的字符串传递,并在Oracle服务器上一次性执行上述查询!

任何帮助都将是非常感激的。

如何在Oracle PL/SQL中传递逗号分隔的字符串,并遍历它来执行查询

使用逗号分隔的列表,您可以使用下面的函数来分割您的id:

  select regexp_substr(:id,'[^,]+',1,level) element
      from mytable
    connect by level <= length(regexp_replace(:id,'[^,]+')) + 1

所以最后的查询:

DELETE FROM MyTable WHERE ID in ( select regexp_substr(:id,'[^,]+',1,level) element
                                   from mytable
                                 connect by level <= length(regexp_replace(:id,'[^,]+')) + 1)