Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / PLpg/SQL, как в функции присвоить результат запроса переменной / 12 сообщений из 12, страница 1 из 1
05.01.2007, 09:16
    #34237861
postuser
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PLpg/SQL, как в функции присвоить результат запроса переменной
Как в функции (триггерной или любой другой) присвоить результат запроса переменной, которая потом будет использоваться в др. запросах. Есть ли аналог PQgetvalue(res,0,0) в PLpg/SQL? В док-ии не нашел, да и с английским проблемы :(.
PS: Может есть хорошие статьи на русском по написанию хранимых процедур, буду благодарен за ссылку.
...
Рейтинг: 0 / 0
05.01.2007, 12:42
    #34238140
СергейК
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PLpg/SQL, как в функции присвоить результат запроса переменной
postuserКак в функции (триггерной или любой другой) присвоить результат запроса переменной, которая потом будет использоваться в др. запросах. Есть ли аналог PQgetvalue(res,0,0) в PLpg/SQL? В док-ии не нашел, да и с английским проблемы :(.
PS: Может есть хорошие статьи на русском по написанию хранимых процедур, буду благодарен за ссылку.

Naskolko ia Vas ponial, Vam podoidet konstruktsia SELECT INTO
http://www.postgresql.org/docs/8.2/static/plpgsql-statements.html#PLPGSQL-STATEMENTS-SQL-ONEROW
...
Рейтинг: 0 / 0
05.01.2007, 17:59
    #34238701
Jelis
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PLpg/SQL, как в функции присвоить результат запроса переменной
postuser В док-ии не нашел, да и с английским проблемы :(.

Наверно это понимать надо так : "С англиским проблемы, поэтому доку не читал" :-) Ну да это не страшно :-)
Как сказал СергейК надо INSERT INTO использовать

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
 ... FUNCTION ...
 DECLARE
      my_var INTEGER;
  BEGIN
      SELECT INTO my_var id FROM MyTable WHERE blabla= 1 ;
      INSERT INTO MyTable2(mytable_id) VALUES(my_var);
...

А доки на русском ... вроде какие были, правда по PL/SQL я не видел. Есть несколько книг о Постгресе на русском - вполне ни чего так, для начала. Так что если с англиским проблеммы, покупай лучше книгу.
...
Рейтинг: 0 / 0
09.01.2007, 11:00
    #34242140
romand
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PLpg/SQL, как в функции присвоить результат запроса переменной
А существуют ли более детализированые доки (возможно примеры) по plpgsql нежели в мануале?
Можна и на английском.
...
Рейтинг: 0 / 0
09.01.2007, 11:27
    #34242262
Andrey Daeron
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PLpg/SQL, как в функции присвоить результат запроса переменной
romandА существуют ли более детализированые доки (возможно примеры) по plpgsql нежели в мануале?
Можна и на английском.
А чего в мануале не хватает?
...
Рейтинг: 0 / 0
10.01.2007, 17:17
    #34246449
romand
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PLpg/SQL, как в функции присвоить результат запроса переменной
Если запрос возвращает одну запись и заранее известно сколько в ней значений, то, например:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
SELECT sum(h1),sum(h2),sum(h3),sum(h4),sum(h5),sum(h6),sum(h7),sum(h8),sum(h9),
  sum(h10),sum(h11),sum(h12),sum(h13),sum(h14),sum(h15),sum(h16),sum(h17),sum(h18),
  sum(h19),sum(h20),sum(h21),sum(h22),sum(h23),sum(h24)
  INTO se1,se2,se3,se4,se5,se6,se7,se8,se9,se10,se11,se12,
  se13,se14,se15,se16,se17,se18,se19,se20,se21,se22,se23,se24
  FROM asoe
  WHERE asoe.dt=d AND asoe.aid IN
  (SELECT units.uid FROM units WHERE units.pid IN (id,idd));
где se1,...se24 определяются в блоке DECLARE.

Вопрос:
как переменным в процедуре присвоить результат запроса, возвращающего несколько записей (столбик), количество которых заранее не известно?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
SELECT h1,h2,h3,h4,h5,h6,h7,h8,h9,h10,h11,h12,h13,h14,h15,h16,h17,h18,h19,h20,h21,h22,h23,h24
  FROM asoe
  WHERE asoe.dt=d AND asoe.aid IN
  (SELECT units.uid FROM units WHERE units.pid IN (id,idd));

SELECT p0b
  FROM m10012
  WHERE dt=d AND uid IN 
  (SELECT units.uid FROM units WHERE units.pid IN (id,idd));

конечная цель - получить sum(h1*p0b),....,sum(h24*p0b)
Третий день не могу въехать как?!
...
Рейтинг: 0 / 0
10.01.2007, 17:26
    #34246485
Jelis
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PLpg/SQL, как в функции присвоить результат запроса переменной
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
SELECT INTO p0b_var p0b
  FROM m10012 .... ;

SELECT sum(h1) * p0b_var , sum(h2) * p0b_var, ... 
  FROM asoe
  WHERE asoe.dt=d AND asoe.aid IN
  (SELECT units.uid FROM units WHERE units.pid IN (id,idd))
  GROUP BY h1, h2, ...; 

...
Рейтинг: 0 / 0
10.01.2007, 17:52
    #34246594
romand
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PLpg/SQL, как в функции присвоить результат запроса переменной
уточню и упрощу вопрос,
первый запрос возвращает:

h1 h2 h3....h24
_______
a, b, c...
d, e, f...
g, h, j...

втотой:

p0b
_
x
y
z

нужно получить
a*x, b*x, c*x...
d*y, e*y, f*y..
g*z, h*z, j*z...
...
Рейтинг: 0 / 0
10.01.2007, 18:42
    #34246726
st_serg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PLpg/SQL, как в функции присвоить результат запроса переменной
имхо, проще всего сделать это на какомнить plperl, plpython
...
Рейтинг: 0 / 0
10.01.2007, 22:45
    #34247120
Jelis
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PLpg/SQL, как в функции присвоить результат запроса переменной
Ээээ.... так вы определитесь что вам надо то!

a*x, b*x, c*x
d*y, e*y, f*y
g*z, h*z, j*z

или

a*x+d*y+g*z, b*x+e*y+h*z, c*x+f*y+j*z

Если второе то примерно так, если первый вариант то гроуп и сум не нужен.
Код: plaintext
1.
2.
3.
4.
SELECT m.uid, sum(a.h1 * m.p0b), sum (a.h2 * m.p0b)
FROM m10012 AS m LEFT OUTER JOIN asoe AS a ON m.uid = a.aid
WHERE m.dt = d AND m.uid IN  (SELECT units.uid FROM units WHERE units.pid IN (id,idd))
GROUP BY m.uid;

Ну и с ключами определитесь. По какому ключу a и x связывать? Потому как должно быть наверно так

уточню и упрощу вопрос,
первый запрос возвращает:

id, h1 h2 h3....h24
_______
1, a, b, c...
2, d, e, f...
3, g, h, j...

втотой:

id, p0b
_
1, x
2, y
3, z


st_sergимхо, проще всего сделать это на какомнить plperl, plpython
Наверно, всетаки, это проще всего сделать на чистом SQL, только для начала нужно четко задачу поставить. :-)
...
Рейтинг: 0 / 0
11.01.2007, 09:15
    #34247510
romand
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PLpg/SQL, как в функции присвоить результат запроса переменной
Да, не совсем внятный был вопрос, решилось всё так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SELECT sum(h1*p0b/ 100 ),sum(h2*p0b/ 100 ),sum(h3*p0b/ 100 ),sum(h4*p0b/ 100 ),sum(h5*p0b/ 100 ),sum(h6*p0b/ 100 ),
sum(h7*p0b/ 100 ),sum(h8*p0b/ 100 ),sum(h9*p0b/ 100 ),sum(h10*p0b/ 100 ),sum(h11*p0b/ 100 ),sum(h12*p0b/ 100 ),sum(h13*p0b/ 100 ),
sum(h14*p0b/ 100 ),sum(h15*p0b/ 100 ),sum(h16*p0b/ 100 ),sum(h17*p0b/ 100 ),sum(h18*p0b/ 100 ),sum(h19*p0b/ 100 ),sum(h20*p0b/ 100 ),
sum(h21*p0b/ 100 ),sum(h22*p0b/ 100 ),sum(h23*p0b/ 100 ),sum(h24*p0b/ 100 )
  INTO se1,se2,se3,se4,se5,se6,se7,se8,se9,se10,se11,se12,
  se13,se14,se15,se16,se17,se18,se19,se20,se21,se22,se23,se24
  FROM asoe,m10012
  WHERE asoe.dt=d AND m10012.dt=d AND asoe.aid=m10012.uid
  AND asoe.aid IN (SELECT units.uid FROM units WHERE units.pid IN (id,idd) ORDER BY pid,uid)
  AND m10012.uid IN (SELECT units.uid FROM units WHERE units.pid IN (id,idd) ORDER BY pid,uid);
связываем две таблицы по ключю asoe.aid=m10012.uid, вычисляем и сумируем.

Большое спасибо за помощь!
...
Рейтинг: 0 / 0
11.01.2007, 09:26
    #34247530
romand
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PLpg/SQL, как в функции присвоить результат запроса переменной
и ещё :)

Код: plaintext
1.
2.
3.
4.
FROM asoe,m10012
  WHERE asoe.dt=d AND m10012.dt=d AND asoe.aid=m10012.uid
  AND asoe.aid IN (SELECT units.uid FROM units WHERE units.pid IN (id,idd))
  AND m10012.uid IN (SELECT units.uid FROM units WHERE units.pid IN (id,idd));
=
Код: plaintext
1.
2.
FROM m10012 AS m LEFT OUTER JOIN asoe AS a ON m.uid = a.aid
WHERE m.dt = d AND m.uid IN  (SELECT units.uid FROM units WHERE units.pid IN (id,idd))

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


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