Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

распарсить строку во входящем параметре запроса [D6, FireBird]


tomkat ©   (2010-12-15 17:45:00) 

День добрый. подскажите оптимальное решение :есть запрос , входящий параметр - строка с перечнем дат , типа "01.05.2010;02.03.2009;07.08.2007", нужно получить список дат и для них запустить некую процедуру внутри.


Правильный$Вася   (2010-12-17 17:09:00) [1]

а насколько велик этот список дат?
не вылезет ли он за ограничение на длину строки или запроса?


Виталий Панасенко   (2010-12-17 15:50:00) [2]

кто-то из нас "гонит". особой разницы между процедурой и блоком нету...кроме одного: для блока не нужно "ковырять" БД. а так я "потерялся"...и не понял, почему блок нельзя юзать.. ну то от лукавого!


tomkat   (2010-12-16 15:02:00) [3]

можно без процедуры..мне ж его из базы вызывать ... а вот внутри процедуры execute block  не вызывается :-(


Виталий Панасенко   (2010-12-16 14:15:00) [4]

если ФБ 2,х, то можно без процедуры.. execute block Тебе в помощь


tomkat   (2010-12-16 13:12:00) [5]

ВОТ решение ! на входе пишем
01.02.2005,03.08.2007,17.12.2010
получаем

ID
01.02.2005
03.08.2007
17.12.2010


вот процедура
create procedure PARSDATESTR (
   IDS varchar(32700))
returns (
   ID varchar(100))
as
declare variable I integer = 1;
declare variable J integer = 1;
BEGIN
 IDS = TRIM(:IDS);
 WHILE (:I <= CHAR_LENGTH(:IDS)) DO
 BEGIN
   IF (',' = SUBSTRING(:IDS FROM :I FOR 1)) THEN
   BEGIN
     ID = SUBSTRING(:IDS FROM :J FOR :I - :J);
     SUSPEND;
     I = :I + 1;
     J = :I;
   END
   I = :I + 1;
 END
 IF (:I > :J) THEN
 BEGIN
   ID = SUBSTRING(:IDS FROM :J FOR :I - :J);
   SUSPEND;
 END
END


tomkat   (2010-12-16 13:07:00) [6]

здесь нет таблицы, мне нужно генерировать набор записей из распарсеной строки входящего параметра
что-то с использованием WHILE, SUBSTRING


Виталий Панасенко   (2010-12-16 13:04:00) [7]

еще вариант - execute statement


tomkat   (2010-12-16 12:38:00) [8]

select field1 from table1 where field1 in (1,2,3)
это как  ? что такое (1,2,3) ???? при чем здесь таблица ??


Виталий Панасенко   (2010-12-16 11:56:00) [9]

execute block


Ega23   (2010-12-16 00:58:00) [10]

select field1 from table1 where field1 in (1,2,3)


Наверх

Титульная страница Поиск, карта сайта Написать письмо