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

Stored procedures 将逗号分隔的数字传递给存储过程中的IN子句,stored-procedures,oracle11g,Stored Procedures,Oracle11g,我有一个存储过程,它接受Oracle中名为p_LOCATIONS的varchar参数。此locations参数具有以逗号分隔的位置id。在数据库中locationId是一个数字 当存在多个位置时,以下sql查询将抛出一个无效的数字。我理解,因为逗号,它无法将varchar转换为数字。我怎样才能做到这一点 create or replace PROCEDURE GET_RAW_DATA ( P_LOCATIONS IN VARCHAR2,

我有一个存储过程,它接受Oracle中名为p_LOCATIONS的varchar参数。此locations参数具有以逗号分隔的位置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;

你所做的最终结果是:

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
);

我非常感谢你。它工作得很好。非常感谢。