Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / plpgsql, looping через квери резулт :) - помогите плз разобраться с глюком / 5 сообщений из 5, страница 1 из 1
14.07.2007, 20:35
    #34659314
aov
aov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
plpgsql, looping через квери резулт :) - помогите плз разобраться с глюком
такая вот функция:
Код: plaintext
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.
create or replace function zak.itogi_po_tochkam(p_id_post int) returns text as
$$
declare 
	t text=''; r record; cmd text;
begin
/*
	cmd='select count(*) as cnt,ka.kaname,sum(p.cena*t.kvo) as sum1,sum(p.cena*t.kvo2) as sum2,sum(p.cena*(coalesce(t.kvo,0)+coalesce(t.kvo2,0))) as sum_all
		from zak.ztochek_to_zpost t
		join zak.zak_tochek_poz tp on t.fk_ztochek_poz=tp.id
		join zak.zak_tochek zt on tp.fk_zak_tochki=zt.id
		join spr.ka ka on zt.fk_tochki=ka.id
		join zak.zak_post_poz p on t.fk_zpost_poz=p.id
		where p.fk_zak_to_post is null and fk_post=' || p_id_post || ' group by kaname;';
*/
	for r in  
		select count(*) as cnt,ka.kaname,sum(p.cena*t.kvo) as sum1,sum(p.cena*t.kvo2) as sum2,sum(p.cena*(coalesce(t.kvo, 0 )+coalesce(t.kvo2, 0 ))) as sum_all
			from zak.ztochek_to_zpost t
			join zak.zak_tochek_poz tp on t.fk_ztochek_poz=tp.id
			join zak.zak_tochek zt on tp.fk_zak_tochki=zt.id
			join spr.ka ka on zt.fk_tochki=ka.id
			join zak.zak_post_poz p on t.fk_zpost_poz=p.id
			where p.fk_zak_to_post is null and fk_post=p_id_post 
			order by kaname
			group by kaname
	loop
		t=t || chr( 10 ) 
			|| chr( 13 ) 
			|| r.kaname 
			|| '  поз.' 
			|| r.cnt 
			|| '  ' 
			|| to_char(r.sum1,'999 990.00')
			|| ' + ' 
			|| to_char(r.sum2,'999 990.00') 
			|| ' = ' 
			|| to_char(r.sum_all,'999 990.00');
	end loop;
	return t;
end
$$ language plpgsql;

почемуто упорно оно ругается на использование параметра в запросе, который в цикле используется. когда for r in execute cmd - тогда нормально всё. нельзя тут параметры использовать? токо через execute?

и ещё вопрос - можете громко смеяться и что угодно говорить - но он именно главный. именно тут чёто я забуксовал. может очепятка гдето у меня - но я все глаза проглядел - в упор ничего не вижу подозрительного. короче трабл в том, что когда вот этот запрос который в цикле используется выдаёт больше 1-й строки - то функция null возвращает - вместо многострочного текста. я не понимаю что там за полтергейст. бред какой-то :(

а вот проверочная функция:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
create or replace function test.test() returns text as
$$
declare 
	t text='';i int;
begin
	for i in  1 .. 20  loop
		t=t || chr( 10 ) || chr( 13 ) || 'bla bla bla';
	end loop;
	return t;
end
$$ language plpgsql;

это вроде как практически одно и тоже. но тест работает как часы.
помогите плз разобраться где тут собака порыта. вообще не понимаю что происходит. даже если бы запрос не вернул ни одной строки - тогда бы тоже не могло оно быть null - ведь ему же сразу присваивается значение - ''. ну я на всякий случай там поставил не '' а 'x' - однохренственно :(
...
Рейтинг: 0 / 0
16.07.2007, 07:43
    #34659901
Serik Akhmetov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
plpgsql, looping через квери резулт :) - помогите плз разобраться с глюком
aovпочемуто упорно оно ругается на использование параметра в запросе, который в цикле используется. когда for r in execute cmd - тогда нормально всё. нельзя тут параметры использовать? токо через execute?Проверьте, не пересекаются ли названия переменных plpgsql и полей в таблицах, участвующих в запросе.
aovи ещё вопрос - можете громко смеяться и что угодно говорить - но он именно главный. именно тут чёто я забуксовал. может очепятка гдето у меня - но я все глаза проглядел - в упор ничего не вижу подозрительного. короче трабл в том, что когда вот этот запрос который в цикле используется выдаёт больше 1-й строки - то функция null возвращает - вместо многострочного текста. я не понимаю что там за полтергейст. бред какой-то :( Поставьте raize info на все переменные, из которых склеивается результирующая строка, одна из них будет NULL.
...
Рейтинг: 0 / 0
16.07.2007, 10:21
    #34660152
Dan Black
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
plpgsql, looping через квери резулт :) - помогите плз разобраться с глюком
надо начать с того, что в приведенном коде нет вообще знака присваивания ( := ), зато присутствует знак проверки на равенство

Verba volent, scripta manent
...
Рейтинг: 0 / 0
16.07.2007, 12:33
    #34660727
aov
aov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
plpgsql, looping через квери резулт :) - помогите плз разобраться с глюком
спасибо большое - действительно видимо из-за null там результат такой получается. надо coalesce везде поставить. который раз на эти грабли настумаю - но в основном на математических операциях - а на конкатенации как-то ещё не попадался. вообще не знаю кто придумал что результатом будет нул если одна из переменных нул. и зачем это и кому надо - тоже не оч понимаю.
и не оч понимаю в чём разница между "=" и ":=". вроде у меня и так и так бывает - разницы не замечал пока. она есть?
...
Рейтинг: 0 / 0
16.07.2007, 12:33
    #34660730
aov
aov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
plpgsql, looping через квери резулт :) - помогите плз разобраться с глюком
спасибо большое - действительно видимо из-за null там результат такой получается. надо coalesce везде поставить. который раз на эти грабли настумаю - но в основном на математических операциях - а на конкатенации как-то ещё не попадался. вообще не знаю кто придумал что результатом будет нул если одна из переменных нул. и зачем это и кому надо - тоже не оч понимаю.
и не оч понимаю в чём разница между "=" и ":=". вроде у меня и так и так бывает - разницы не замечал пока. она есть?
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / plpgsql, looping через квери резулт :) - помогите плз разобраться с глюком / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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