将逗号分隔的数字传递给存储过程中的IN子句

时间:2014-07-02 20:20:22

标签: stored-procedures oracle11g

我有一个存储过程,它在Oracle中采用名为P_LOCATIONS的varchar参数。此位置参数具有以逗号分隔的位置ID。在数据库中,locationId是一个数字。

当有多个位置时,以下sql查询会抛出一个无效数字。据我所知,因为逗号它无法将varchar转换为数字。我怎样才能做到这一点?

    create or replace PROCEDURE       GET_RAW_DATA
      (   P_LOCATIONS IN VARCHAR2, 
          Results   OUT   SYS_REFCURSOR
        )AS 
        BEGIN

       select * from tableName where LOCATION_ID IN ( P_LOCATIONS);
      END GET_RAW_DATA;

1 个答案:

答案 0 :(得分:0)

您正在做的最终结果是:

select * from tableName where LOCATION_ID IN ('1,2,3');

你需要的是:

select * from tableName where LOCATION_ID IN (1,2,3);

所以你可以使用它:

select * from tableName where LOCATION_ID in (
    select regexp_substr(P_LOCATIONS,'[^,]+{1}',1,level)
    from dual connect by level <= length(regexp_replace(P_LOCATIONS,'[^,]*')) + 1
);