Передать число через запятую в предложение IN в хранимой процедуре

#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. Я вам очень благодарен. Это сработало идеально. Спасибо миллион.