powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / FOR EXECUTE STATEMENT
21 сообщений из 21, страница 1 из 1
FOR EXECUTE STATEMENT
    #32465623
Фотография Dnico
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробовал реализовать следующее :
Код: plaintext
1.
2.
FOR EXECUTE STATEMENT 'SELECT SUM(QTY) FROM DOC WHERE Y = ' || Y
INTO :QTY

И получил полный облом ...
Увы, оказывается такая конструкция не работает. (FB 1.5)

Best regards,
Dnico.
...
Рейтинг: 0 / 0
FOR EXECUTE STATEMENT
    #32465640
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А FOR то тут нафига??
...
Рейтинг: 0 / 0
FOR EXECUTE STATEMENT
    #32465665
FreemanZAV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На самом деле не работает, даже если убрать FOR. Что характерно: count, min, max работают.
...
Рейтинг: 0 / 0
FOR EXECUTE STATEMENT
    #32465688
Somebody2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Допусти Y='yyyy', тогда
'SELECT SUM(QTY) FROM DOC WHERE Y = ' || Y

превращается в

SELECT SUM(QTY) FROM DOC WHERE Y = yyyy

Короче нужно еще подклеить апострофы, я так думаю
...
Рейтинг: 0 / 0
FOR EXECUTE STATEMENT
    #32465695
Somebody2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
>Увы, оказывается такая конструкция не работает. (FB 1.5)
Да, забыл спросить. А зачем нужно, что бы эта конструкция заработала?
...
Рейтинг: 0 / 0
FOR EXECUTE STATEMENT
    #32465701
Фотография Dnico
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий
FOR для того чтобы просчитать по группам. Просто я убрал GROUP BY Y
Только все равно не хочет работать.
Пишет:
Unsuccessful execution caused by an unavaible resource ...

Best regards,
Dnico.
...
Рейтинг: 0 / 0
FOR EXECUTE STATEMENT
    #32465709
Фотография Dnico
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Somebody2

Хотел Join разные писать. Есть много вариантов этих JOIN и много расчетов по полученным результатам. А сам сапрос одинаковый. JOIN только ограничивают
записи по разным полям.


Best regards,
Dnico.
...
Рейтинг: 0 / 0
FOR EXECUTE STATEMENT
    #32465713
Фотография Dnico
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не работает с COUNT, SUM, AVG ...

Best regards,
Dnico.
...
Рейтинг: 0 / 0
FOR EXECUTE STATEMENT
    #32465748
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Приведи скрипт таблицы и текст запроса. Где-то ты пургу инициируешь, имхо.
...
Рейтинг: 0 / 0
FOR EXECUTE STATEMENT
    #32465754
FreemanZAV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Final Release с COUNT работает
...
Рейтинг: 0 / 0
FOR EXECUTE STATEMENT
    #32465757
Somebody2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А у меня работает (чесно слово!) если апострофы доклеить:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
FOR EXECUTE STATEMENT 'SELECT SUM(QTY) FROM DOC WHERE Y = ' ||  ''''  ||  Y  || ''''
INTO :QTY
do 
begin
   ...
  suspend;
end
...
Рейтинг: 0 / 0
FOR EXECUTE STATEMENT
    #32465780
Фотография Dnico
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Упростил до этого (не работает) (FB 1.5 - C9 под Linux)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
CREATE PROCEDURE NEW_PROCEDURE 
RETURNS (
    QTY FLOAT)
AS
BEGIN
  FOR EXECUTE STATEMENT
    'SELECT COUNT(QTY) FROM DOC'
  INTO :QTY
  DO
    SUSPEND;
END


Best regards,
Dnico.
...
Рейтинг: 0 / 0
FOR EXECUTE STATEMENT
    #32465785
FreemanZAV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня проблеме решилась так:
...
DECLARE VARIABLE QTY as double PRECISION;

...

FOR EXECUTE STATEMENT 'SELECT SUM(QTY as double PRECISION) FROM DOC WHERE Y = ' || Y

INTO :QTY

Т.е. поле суммирования должно быть double PRECISION;
...
Рейтинг: 0 / 0
FOR EXECUTE STATEMENT
    #32465797
Фотография Dnico
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FreemanZAV
Вот и я попробовал на разных типах ... Ух ... ЗАРАБОТАЛО !!!

ВСЕМ СПАСИБО !!!

РЕЗЮМЕ:
Работает только, если переменная DOUBLE PRECISION или INTEGER.
Все остальные типы - ОШИБКА!

2 балла - Alex Peshkov

Best regards,
Dnico.
...
Рейтинг: 0 / 0
FOR EXECUTE STATEMENT
    #32465808
FreemanZAV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>FOR EXECUTE STATEMENT 'SELECT SUM(QTY as double PRECISION) FROM DOC
>WHERE Y = ' || Y
>INTO :QTY
Cast забыл. У меня эта конструкция требует явного приведения типов (т.е. всегда надо использовать CAST). Сервер под Linux RedHat 7.
...
Рейтинг: 0 / 0
FOR EXECUTE STATEMENT
    #32465811
FreemanZAV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, разработчиков грех ругать. Мы сами не без греха.
...
Рейтинг: 0 / 0
FOR EXECUTE STATEMENT
    #32465814
Фотография Dnico
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну это я так ...

Best regards,
Dnico.
...
Рейтинг: 0 / 0
FOR EXECUTE STATEMENT
    #32465818
Somebody2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Во блин. Так ясен пень, сount без cast integer возвращает, а его во float нагло пихают

>Работает только, если переменная DOUBLE PRECISION или INTEGER.
>Все остальные типы - ОШИБКА!

Неправда ваша Я с varchar -ами попробовал - сработало. Причем не поленился , попробовал на
RC7,8,9 и Release (В Линуксе оно ставится буквально за секунды и без перезагрузки компа)
...
Рейтинг: 0 / 0
FOR EXECUTE STATEMENT
    #32465829
Somebody2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я
Я с varchar -ами попробовал - сработало

Естественно используя cast
...
Рейтинг: 0 / 0
FOR EXECUTE STATEMENT
    #32465868
Фотография Dnico
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня QTY в таблице и в ХП было с типом FLOAT ...
Зачем преобразовывать, Если я суммирую (SUM) ?

P.S.

SELECT COUNT(*) FROM DOC INTO :QTY /* QTY AS FLOAT) */ - работает без проблем.

Best regards,
Dnico.
...
Рейтинг: 0 / 0
FOR EXECUTE STATEMENT
    #32465922
Somebody2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
4.
5.
6.
У меня QTY в таблице и в ХП было с типом FLOAT ...
Зачем преобразовывать, Если я суммирую (SUM) ?

P.S.

SELECT COUNT(*) FROM DOC INTO :QTY  /* QTY AS FLOAT) */  - работает без проблем.

Есть такакая партия Видимо в execute statement типы надо приводить явно. Только мне
кажется ты несколько погорячился с оценками - лично мне execute statement сильно жизнь
облегчил . Тем более, что приведенные тобой проблемы (если их можно назвать проблемами),
достаточно легко обходятся

А вообще, я тут на работе сижу, машину жду, скучаю и мне просто пообщаться захотелось
Ну все уехал... :)
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / FOR EXECUTE STATEMENT
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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