首页 > 解决方案 > oracle将存储过程的字符串参数转换为数字数组

问题描述

我正在编写一个需要带有数字数组的 WHERE IN 子句的存储过程。如何将这个数字数组传递给 SP。我的想法是发送一个像'123,234,345'这样的字符串,然后在使用它之前在SP中解析它。这是一个好方法吗?如果是,我怎样才能使下面的代码工作?

CREATE OR REPLACE PROCEDURE sp_test2
(
    ids in varchar2, 
    cursor_ OUT SYS_REFCURSOR
)
AS
BEGIN
    OPEN cursor_ FOR

    SELECT *FROM my_table
    WHERE my_table.ID IN (
          SELECT regexp_substr(ids,'[^:]+', 1, level) AS list FROM dual
          CONNECT BY regexp_substr(ids, '[^:]+', 1, level) IS NOT NULL);
END;
/

例如(而不是转换代码)当这样使用时: IN(ids) i get ORA-01722: invalid number error

标签: oraclestored-proceduresplsql

解决方案


我真的不想让事情复杂化

如果您可以简单地将一串以逗号分隔的数字作为参数传递并在之后将其拆分,那么您可以这样做:

SELECT *FROM my_table
WHERE my_table.ID IN (
      SELECT regexp_substr(ids,'[^,]+', 1, level) AS list FROM dual
      CONNECT BY regexp_substr(ids, '[^,]+', 1, level) IS NOT NULL);

但是,我不认为使用集合会使事情变得过于复杂。


推荐阅读