Конференция "Базы" » распарсить строку во входящем параметре запроса [D6, FireBird]
 
  • tomkat (15.12.10 17:45) [0]
    День добрый. подскажите оптимальное решение :есть запрос , входящий параметр - строка с перечнем дат , типа "01.05.2010;02.03.2009;07.08.2007", нужно получить список дат и для них запустить некую процедуру внутри.
  • Ega23 © (16.12.10 00:58) [1]
    select field1 from table1 where field1 in (1,2,3)

  • Виталий Панасенко (16.12.10 11:56) [2]
    execute block
  • tomkat (16.12.10 12:38) [3]
    select field1 from table1 where field1 in (1,2,3)


    это как  ? что такое (1,2,3) ???? при чем здесь таблица ??
  • Виталий Панасенко (16.12.10 13:04) [4]
    еще вариант - execute statement
  • tomkat (16.12.10 13:07) [5]
    здесь нет таблицы, мне нужно генерировать набор записей из распарсеной строки входящего параметра
    что-то с использованием WHILE, SUBSTRING
  • tomkat (16.12.10 13:12) [6]
    ВОТ решение ! на входе пишем
    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

  • Виталий Панасенко (16.12.10 14:15) [7]
    если ФБ 2,х, то можно без процедуры.. execute block Тебе в помощь
  • tomkat (16.12.10 15:02) [8]
    можно без процедуры..

    мне ж его из базы вызывать ... а вот внутри процедуры execute block  не вызывается :-(
  • Виталий Панасенко (17.12.10 15:50) [9]
    кто-то из нас "гонит". особой разницы между процедурой и блоком нету...кроме одного: для блока не нужно "ковырять" БД. а так я "потерялся"...и не понял, почему блок нельзя юзать.. ну то от лукавого!
  • Правильный$Вася (17.12.10 17:09) [10]
    а насколько велик этот список дат?
    не вылезет ли он за ограничение на длину строки или запроса?
 
Конференция "Базы" » распарсить строку во входящем параметре запроса [D6, FireBird]
Есть новые Нет новых   [134431   +15][b:0][p:0.002]