-
День добрый. подскажите оптимальное решение :есть запрос , входящий параметр - строка с перечнем дат , типа "01.05.2010;02.03.2009;07.08.2007", нужно получить список дат и для них запустить некую процедуру внутри.
-
select field1 from table1 where field1 in (1,2,3)
-
execute block
-
select field1 from table1 where field1 in (1,2,3) это как ? что такое (1,2,3) ???? при чем здесь таблица ??
-
еще вариант - execute statement
-
здесь нет таблицы, мне нужно генерировать набор записей из распарсеной строки входящего параметра что-то с использованием WHILE, SUBSTRING
-
ВОТ решение ! на входе пишем 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
-
если ФБ 2,х, то можно без процедуры.. execute block Тебе в помощь
-
можно без процедуры.. мне ж его из базы вызывать ... а вот внутри процедуры execute block не вызывается :-(
-
кто-то из нас "гонит". особой разницы между процедурой и блоком нету...кроме одного: для блока не нужно "ковырять" БД. а так я "потерялся"...и не понял, почему блок нельзя юзать.. ну то от лукавого!
-
а насколько велик этот список дат? не вылезет ли он за ограничение на длину строки или запроса?
|