Хороший способ разобраться со значениями, разделенными запятыми - PullRequest
0 голосов
/ 16 июня 2010

Я получаю переданные через запятую значения хранимой процедуре в oracle. Я хочу обработать эти значения как таблицу, чтобы использовать их в запросе, например:

select * from tabl_a where column_b in (<csv values passed in>)

Какой лучший способ сделать это в 11 г?

Прямо сейчас мы перебираем их по очереди и вставляем в gtt, что я считаю неэффективным.

Есть указатели?

Ответы [ 3 ]

1 голос
/ 16 июня 2010

Это решает точно такую ​​же проблему

Спроси Тома

1 голос
/ 16 июня 2010

Oracle не поставляется со встроенным токенизатором.Но можно накатить свои, используя SQL Types и PL / SQL.Я разместил пример решения в этой другой SO-теме .

. Это позволило бы решить проблему следующим образом:

select * from tabl_a 
where column_b in ( select * 
                    from table (str_to_number_tokens (<csv values passed in>)))
/
0 голосов
/ 21 сентября 2014

В 11g вы можете использовать параметр "вхождения" REGEXP_SUBSTR, чтобы выбрать значения непосредственно в SQL:

select regexp_substr(<csv values passed in>,'[^,]+',1,level) val
from   dual
connect by level < regexp_count(<csv values passed in>,',')+2;

Но так как regexp_substr несколько дорог, я не уверен, является ли он наиболее эффективным с точки зрения того, чтобы быть самым быстрым.

...