powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Распарсить строку в коллекцию. Или?
4 сообщений из 4, страница 1 из 1
Распарсить строку в коллекцию. Или?
    #39818180
ka2r2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте.

С sql только начинаю дружить. Помогите советом или направьте в нужную сторону, пожалуйста.

Есть таблица с числовым полем. Есть процедура, которая селектом должна выбирать данные из таблицы по этому полю.
В процедуру на вход сделал varchar строку, где приходят параметры для выборки по числовому полю. Если прислыаю одно значение в виде "1", то выборка проходит нормально. Если "1, 2", то IN не работает.

Как написать запрос, если в процедуру приходит строка с нужными значениями поля?

То есть в процедуру приходит строка "1, 2, 3". Нужно из таблицы выбрать все записи со значением поля 1, 2 или 3.
Изначально написал с использованием IN, но потом дошло что строку оператор не поймет и надо парсить.
Нужно ли делать через коллекцию или есть более правильный/простой способ?
Или может в процедуру нужно не строку передавать, а есть умнее способ?

Заранее спасибо.
...
Рейтинг: 0 / 0
Распарсить строку в коллекцию. Или?
    #39818182
Фотография Fogel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Типовое решение в данном случае использовать динамический sql
дока ,
статья с примерами

Но если хочешь парсер, то можно и парсер.
Код: plsql
1.
2.
3.
4.
5.
...
str := '1,2,3'
...
in (select cast(regexp_substr(str,'[^,]',1,level) as number) from dual connect by level <= regexp_count(str,'[^,]'))
...


пример для развития - погугли, что в нём что обозначает и как работает.
ну и другие способы есть, в том числе менять то, что на вход передаёшь. всё зависит от твоей инфраструктуры (какое клиентское приложение и др.)
...
Рейтинг: 0 / 0
Распарсить строку в коллекцию. Или?
    #39818183
Фотография Fogel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
плюсик забыл (но если у тебя только цифры, т.е. однозначные числа - и первый вариант отработает)
вот так:
Код: plsql
1.
2.
3.
4.
5.
...
str := '1,2,3'
...
in (select cast(regexp_substr(str,'[^,]+',1,level) as number) from dual connect by level <= regexp_count(str,'[^,]+'))
...
...
Рейтинг: 0 / 0
Распарсить строку в коллекцию. Или?
    #39818187
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FogelТиповое решение в данном случае использовать динамический sql


И то и другое открыто для SQL injections посему как минимум придется пропускать через DBMS_ASSERT. Наибoлее безопасный вариант передавать коллекцию или varray или более продвинутый парсер пропускающий только допустимые числа (целые/дробные/знак...).

SY.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Распарсить строку в коллекцию. Или?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]