powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / проблеммы с setof в ХП
4 сообщений из 4, страница 1 из 1
проблеммы с setof в ХП
    #33042864
ZemA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
создаю ХП
Код: 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.
CREATE OR REPLACE FUNCTION pension.qwerty(int4)
  RETURNS SETOF record AS
'
declare
  _year alias for $1;
  _result record;
begin
  if _year = 2003 then
    for _result in
      select p_certificate from pension.employee_donations
       where extract(year from date_donation) = 2003
       group by p_certificate
      having count(p_certificate) = 1
   intersect 
      select p_certificate from pension.employee_donations
       where date_donation = \'2003- 08 - 01 \'::date
       group by p_certificate
    loop
      return next _result;
    end loop;
  else
    for _result in
      select p_certificate from pension.pension_staff ps
       where exists(
         select p_certificate from pension.employee_donations
          where extract(year from date_donation) = _year
            and p_certificate = ps.p_certificate)
    loop
      return next _result;
    end loop;
  end if;
  return;
end;
'
  LANGUAGE 'plpgsql' VOLATILE;

делаю запрос
Код: plaintext
select * from pension.qwerty( 2003 ) as (p_certificate varchar)

а он мне
Код: plaintext
1.
2.
ERROR:  wrong record type supplied in RETURN NEXT
CONTEXT:  PL/pgSQL function "qwerty" line  16  at return next

в доках же сказано
Код: plaintext
1.
2.
RETURN NEXT does not actually return from the function;
it simply saves away the value of the expression (or record or row variable,
as appropriate for the data type being returned).

какого фига он ругается???
...
Рейтинг: 0 / 0
проблеммы с setof в ХП
    #33043029
mwolf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
какого фига он ругается???

Эсли это означает " что мне делать??? ", то напиши вместо
Код: plaintext
1.
2.
_result record
и
RETURNS SETOF record
соответственно
Код: plaintext
1.
2.
_result pension.employee_donations%ROWTYPE
и
RETURNS SETOF pension.employee_donations
.
А если интересует скаральный смысл ошибки, то тут надо подумать.
...
Рейтинг: 0 / 0
проблеммы с setof в ХП
    #33043127
ZemA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mwolf какого фига он ругается???

Эсли это означает " что мне делать??? ", то напиши вместо
Код: plaintext
1.
2.
_result record
и
RETURNS SETOF record
соответственно
Код: plaintext
1.
2.
_result pension.employee_donations%ROWTYPE
и
RETURNS SETOF pension.employee_donations
.
А если интересует скаральный смысл ошибки, то тут надо подумать.
на самом деле если _year = 2003 запрос будет такой (только что дописал)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
      select p_certificate from pension.pension_staff ps
       where exists(
         select p_certificate from pension.employee_donations
          where extract(year from date_donation) =  2003 
            and p_certificate = ps.p_certificate)
      except -- вычитаем
      select p_certificate
        from pension.employee_donations
       where extract(year from date_donation) =  2003 
       group by p_certificate
      having count(p_certificate) =  1 
   intersect 
      select p_certificate
        from pension.employee_donations
       where date_donation = '2003-08-01'::date
       group by p_certificate
поэтому можно сделать
Код: plaintext
1.
2.
3.
_result pension.pension_staff%ROWTYPE
и
RETURNS SETOF pension.pension_staff
но, до этого у меня была ХП написанная на SQL, возвращая record и она уже используется не в одном месте.
все дело в том что пришлось обрабатывать 2003 год
...
Рейтинг: 0 / 0
проблеммы с setof в ХП
    #33043201
ZemA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
с запросом приведоммым мной в предыдущем ответе все заработало
Код: plaintext
1.
2.
3.
4.
5.
...
  RETURNS SETOF record AS
...
  _result record;
...
      return next _result;
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / проблеммы с setof в ХП
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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