#stored-procedures #oracle11g
#хранимые процедуры #oracle11g
Вопрос:
У меня есть хранимая процедура, которая принимает параметр varchar, называемый P_LOCATIONS в Oracle. Этот параметр locations содержит идентификаторы местоположения, разделенные запятой. В базе данных 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:
Конечный результат того, что вы делаете, заключается в следующем:
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
);
Комментарии:
1. Я вам очень благодарен. Это сработало идеально. Спасибо миллион.