我有一个存储过程,它在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;
答案 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
);