powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / функцыя, в чем ошибка непойму...
2 сообщений из 2, страница 1 из 1
функцыя, в чем ошибка непойму...
    #39169670
Фотография MMM_Corp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
CREATE OR REPLACE FUNCTION public.abc (
  in "cat_id" INTEGER = 0,   in "date1" DATE = NULL,   in "date2" DATE = NULL
)
RETURNS TABLE (num bigint, items_id integer, sname varchar, fprice FLOAT,
 dola FLOAT, suma_dola float, rank char(1)) AS
$body$
DECLARE
  i int;
BEGIN
select set_config('custom.prev', '0', false);

return query select 
h.num, h.items_id, h.sname, h.fprice, h.dola, h.suma_dola,
    case
        when h.suma_dola < 0.5 then 'A'
        when h.suma_dola between 0.5 and 0.85 then 'B'
    	else 'C'
    end ::char(1) rank
from 


(

select
	f.num num,
	f.items_id,
	f.sname,
	f.fprice,
	f.dola,
	f.dola+current_setting('custom.prev')::FLOAT as suma_dola,
	set_config('custom.prev', cast(f.dola+current_setting('custom.prev')::FLOAT as text), false)
from
	(
    -- id товара, название, общая выручка, Доля накопительного итога
    select
    	row_number() over() num,
        t.items_id,
        t.sname,
        t.fprice,
        t.fprice/ sum(t.fprice) over () dola
    	from
        (
        -- id товара, название, сумма, (за указанный период + категорию)
        select
            s.items_id,
            i.sname,
            sum(s.price * s.icount) fprice
            -- c.sname
        from
            sales as s,
            items as i,
            cats as c
         where i.id = s.items_id
            and i.cat_id = c.id
           /* 
           and  i.cat_id = 59
           and s.ddate BETWEEN '01.01.2016' and '01.04.2016'
           */
        group by s.items_id, i.sname
        order by 3 desc) as t
    ) as f
) as h;



END;
$body$
LANGUAGE 'plpgsql'
VOLATILE
CALLED ON NULL INPUT
SECURITY INVOKER;



в не тела функции выполняется нормально, без всяких проблем, а вот в функции почемуто нет

Код: plsql
1.
select * from abc(7, '01.01.2015', '01.01.2016');



ОШИБКА: в запросе нет назначения для данных результата
HINT: Если вам нужно отбросить результаты SELECT, используйте PERFORM.
CONTEXT: функция PL/pgSQL abc(integer,date,date), строка 5, оператор SQL-оператор

что за ерунда... вы уж извините если вопрос глупый, с Postgree крайне редко работаю, но застрял на глупом месте казалось бы...
...
Рейтинг: 0 / 0
функцыя, в чем ошибка непойму...
    #39169673
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MMM_Corp
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
CREATE OR REPLACE FUNCTION public.abc (
  in "cat_id" INTEGER = 0,   in "date1" DATE = NULL,   in "date2" DATE = NULL
)
RETURNS TABLE (num bigint, items_id integer, sname varchar, fprice FLOAT,
 dola FLOAT, suma_dola float, rank char(1)) AS
$body$
DECLARE
  i int;
BEGIN
select set_config('custom.prev', '0', false);

return query select 
h.num, h.items_id, h.sname, h.fprice, h.dola, h.suma_dola,
    case
        when h.suma_dola < 0.5 then 'A'
        when h.suma_dola between 0.5 and 0.85 then 'B'
    	else 'C'
    end ::char(1) rank
from 


(

select
	f.num num,
	f.items_id,
	f.sname,
	f.fprice,
	f.dola,
	f.dola+current_setting('custom.prev')::FLOAT as suma_dola,
	set_config('custom.prev', cast(f.dola+current_setting('custom.prev')::FLOAT as text), false)
from
	(
    -- id товара, название, общая выручка, Доля накопительного итога
    select
    	row_number() over() num,
        t.items_id,
        t.sname,
        t.fprice,
        t.fprice/ sum(t.fprice) over () dola
    	from
        (
        -- id товара, название, сумма, (за указанный период + категорию)
        select
            s.items_id,
            i.sname,
            sum(s.price * s.icount) fprice
            -- c.sname
        from
            sales as s,
            items as i,
            cats as c
         where i.id = s.items_id
            and i.cat_id = c.id
           /* 
           and  i.cat_id = 59
           and s.ddate BETWEEN '01.01.2016' and '01.04.2016'
           */
        group by s.items_id, i.sname
        order by 3 desc) as t
    ) as f
) as h;



END;
$body$
LANGUAGE 'plpgsql'
VOLATILE
CALLED ON NULL INPUT
SECURITY INVOKER;



в не тела функции выполняется нормально, без всяких проблем, а вот в функции почемуто нет

Код: plsql
1.
select * from abc(7, '01.01.2015', '01.01.2016');



ОШИБКА: в запросе нет назначения для данных результата
HINT: Если вам нужно отбросить результаты SELECT, используйте >>>PERFORM<<<.
CONTEXT: функция PL/pgSQL abc(integer,date,date), строка 5, оператор SQL-оператор

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


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