【问题标题】:How to pass comma separated string in Oracle PL/SQL and iterate through it to execute a query?如何在 Oracle PL/SQL 中传递逗号分隔的字符串并遍历它以执行查询?
【发布时间】:2017-02-11 08:29:44
【问题描述】:

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

DELETE FROM MyTable WHERE ID=:Id

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

我们将不胜感激。

提前致谢。

【问题讨论】:

  • 值列表来自哪里,您从哪里执行命令 - 另一个 PL/SQL 块;爪哇; PHP;临*C;别的地方?
  • 它来自我的 C# 代码,字符串 Id="Newyork,Paris,Jakarta";像这样。
  • 嗯,不确定 C#。您可以传递数组in Java 和in C/C++;对于 C#,我认为这可能取决于您使用的是哪个驱动程序,但我没有这方面的经验 - 虽然可能会为您指明正确的方向......基本上您正在寻找绑定嵌套表集合,然后可以使用带有连接的表集合运算符,或 member of 语法。
  • 请注意,“逗号分隔列表”在 SQL/PL/SQL 中不是一个东西,并且没有内置的 split/join 函数。正如@AlexPoole 建议的那样,你最好传递一个实际的集合。

标签: c# oracle plsql oracle11g


【解决方案1】:

使用逗号分隔的列表,您可以使用这样的函数来拆分您的 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)

【讨论】:

    猜你喜欢
    • 2016-07-19
    • 2011-10-25
    • 1970-01-01
    • 1970-01-01
    • 2017-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-25
    相关资源
    最近更新 更多