powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Informix [игнор отключен] [закрыт для гостей] / Функция
5 сообщений из 5, страница 1 из 1
Функция
    #32499129
sergiigray
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Необходимо получить одну строку, получается много. что я делаю не так?
database rt_data;

create function get_lost_uuu(u_num_cnt char(20), u_dat_uchet date)
returning float;
DEFINE u_volumeN float;
DEFINE u_volumeB float;
define u_tempn, u_tempb, u_monthn, u_monthb integer;
let u_volumeN=0;
let u_volumeB=0;
let u_monthN=0;
let u_monthB=0;
let u_tempN=0;
let u_tempB=0;

set explain on;

--- выборка последней записи
foreach
select first 1 nzp_cr, month(dat_uchet), val_cnt into u_tempN, u_monthN, u_volumeN
from counters
where is_actual=1 and num_cnt=u_num_cnt and dat_uchet>=u_dat_uchet
order by nzp_cr desc
EXIT FOREACH;
END FOREACH;

--- выборка предпоследней записи
foreach
select first 1 nzp_cr, month(dat_uchet), val_cnt into u_tempB, u_monthB, u_volumeB
from counters
where is_actual=1 and num_cnt=u_num_cnt and dat_uchet<u_dat_uchet
order by nzp_cr desc
EXIT FOREACH;
END FOREACH;

--- подсчет расхода за месяц
let u_volumeN=(u_volumeN-u_volumeB)/(u_monthN-u_monthB);

set explain off;
return u_volumeN;
end function

document "usage: temp:\"
with listing in 'arht';
--- grant execute on get_lost_uuu to "public" as "are";
--- select 1, get_lost_uuu("29","01.05.2004") from counters;
...
Рейтинг: 0 / 0
Функция
    #32499144
Фотография Daugava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если речь о "select 1, get_lost_uuu("29","01.05.2004") from counters"
то строк вернется столько, сколько строк в counters.
...
Рейтинг: 0 / 0
Функция
    #32499164
sergiigray
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
почему? и как сделать правильно?
...
Рейтинг: 0 / 0
Функция
    #32499210
Фотография Daugava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как почему? Функция здесь совсем не причем, в первую очередь ты делаеш select из таблицы, а уже во вторую для каждой записи, возвращаемой select-ом, выполняется функция. Если необходима гарантирована одна запись, то используют select заведомо возвращающий ровно одну запись, например

select 1, get_lost_uuu("29","01.05.2004")
from systables
where tabid=1

systables взят, как таблица заведомо находящаяся в памяти и не требующая доп.расходов на IO.

В 9-ке сие можно реализовать через set {}
Select 1, get_lost_uuu("29","01.05.2004") from table(set{1})
...
Рейтинг: 0 / 0
Функция
    #32499473
sergiigray
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
спасибо. разобрался
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Informix [игнор отключен] [закрыт для гостей] / Функция
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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