Stored procedures 将逗号分隔的数字传递给存储过程中的IN子句
我有一个存储过程,它接受Oracle中名为p_LOCATIONS的varchar参数。此locations参数具有以逗号分隔的位置id。在数据库中locationId是一个数字 当存在多个位置时,以下sql查询将抛出一个无效的数字。我理解,因为逗号,它无法将varchar转换为数字。我怎样才能做到这一点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,
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
);
我非常感谢你。它工作得很好。非常感谢。