Возможен ли такой запрос?
Возможен ли такой запрос?
FireBird 1.5.3
ХП
Есть входной параметр Code. Через него передают значения следующего вида "1,2,10,15,20,21,22"
Нужно в таблице создать записи и в каждую из них вписать одно значение из Code в поле Value.
Возможно ли выйти из данной ситуации одним запросом? Или как решить данную проблему?
ХП
Есть входной параметр Code. Через него передают значения следующего вида "1,2,10,15,20,21,22"
Нужно в таблице создать записи и в каждую из них вписать одно значение из Code в поле Value.
Возможно ли выйти из данной ситуации одним запросом? Или как решить данную проблему?
Вот откапал, вставка нескольких записей одним запросом)
Теперь осталось только правильно выбрать значения из Code
Код: Выделить всё
insert into treader (rdnumb, rdname)
select cast(author as varchar(8)) || '-00', auname from
tauthor
where auname<'Д';
Пример тела процедурки для разбора строки со списком целочисленных идентификаторов (символ разделителя не имеет значения):где S - varchar-переменная достаточной длины для хранения ID в текстовом виде.
У меня в базе есть одна такая универсальная процедура, которая возвращает из текстовой строки список идентификаторов (в примере заменить insert на suspend и ID сделать выходным параметром процедуры). Эту процедуру я соединяю с той таблицей, по которой надо сделать выборку. Тогда выборка идёт с использованием индекса.
Код: Выделить всё
while (CODE <> '') do begin
while ((CODE <> '') and ('0123456789' not containing substring(CODE from 1 for 1)))
do CODE = substring(CODE from 2 for 30000);
S = '';
while ((CODE <> '') and ('0123456789' containing substring(CODE from 1 for 1)))
do begin
S = S||substring(CODE from 1 for 1);
CODE = substring(CODE from 2 for 30000);
end
if (S <> '') then begin
ID = S;
-- Делаем с очередным ID'шником то, что хотим...
insert into MY_TABLE (ID) values (:ID);
end
end
У меня в базе есть одна такая универсальная процедура, которая возвращает из текстовой строки список идентификаторов (в примере заменить insert на suspend и ID сделать выходным параметром процедуры). Эту процедуру я соединяю с той таблицей, по которой надо сделать выборку. Тогда выборка идёт с использованием индекса.
При select'е с помощью containing каждое значение ID желательно обрамить с обеих сторон нецифровыми символами, например, взять каждое значение в скобки или кавычки. И проверку делать с этими символами, например: '(1)(2)(10)(20)' containing '('||ID||')', тогда не нарвёшься на вхождение 1 в 21 и т.п. Сорри, если это замечание лишнее...Leons писал(а):...Выборка по такой строчке работает на ура

на всякий случай - можно еще и с подобным способом что-нибудь сделать:
http://www.ibase.ru/ibfaq.htm#inparam
http://www.ibase.ru/ibfaq.htm#inparam