आप जो कर रहे हैं उसका अंतिम परिणाम यह है:
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
);