powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Ошибка SETOF-функции
11 сообщений из 11, страница 1 из 1
Ошибка SETOF-функции
    #33781140
Hordi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
8.1.4
Эта функция после добавления еще одного поля начала давать ошибку, ранее работала нормально:
ERROR: wrong record type supplied in RETURN NEXT

Почему - не догоняю... :(

CREATE OR REPLACE FUNCTION mega_checkcreate(dtype_ int4, id_kassa_ int4, id_kassir_ int4, dtime_open_ int4, sum_ "numeric", discount_ "numeric", description_ "varchar", memo_ "varchar")
RETURNS SETOF t_mega_check AS
$BODY$
DECLARE
id INT4;
rec_ RECORD;
BEGIN
SELECT nextval('t_mega_check_id_mega_check_seq') INTO id;
IF NOT FOUND THEN
RAISE EXCEPTION 'Error while create next id for table: t_mega_check!';
END IF;

INSERT INTO t_mega_check VALUES(id,dtype_,id_kassa_,id_kassir_,dtime_open_,0,sum_,discount_,description_,memo_);

FOR rec_ IN SELECT * FROM t_mega_check WHERE id_mega_check=id LOOP
RETURN NEXT rec_;
END LOOP;

RETURN;
END;$BODY$
LANGUAGE 'plpgsql' VOLATILE;
...
Рейтинг: 0 / 0
Ошибка SETOF-функции
    #33781171
Hordi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Заменил на
rec_ t_mega_check%ROWTYPE;

заработало.
Невкурю, как работало раньше...
...
Рейтинг: 0 / 0
Ошибка SETOF-функции
    #33781191
st_serg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
...
RETURNS SETOF t_mega_check
...
rec_ RECORD;
...
RETURN NEXT rec_;
..
видимо теперь пг стал строже проверять соответствие типов.
возможно заработало бы и так rec_ t_mega_check; (без %rowtype);
...
Рейтинг: 0 / 0
Ошибка SETOF-функции
    #33781200
Алексей Ключников
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Видимо раньше эти типы совпадали.
...
Рейтинг: 0 / 0
Ошибка SETOF-функции
    #33781215
4321
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
из t_mega_check удалялись столбцы?
...
Рейтинг: 0 / 0
Ошибка SETOF-функции
    #33781286
st_serg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не дочитал )
Hordi... после добавления еще одного поля начала давать ошибку ...
ну тогда вроде понятно.
...
Рейтинг: 0 / 0
Ошибка SETOF-функции
    #33782072
Фотография Кувалдин Роман
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HordiЗаменил на
rec_ t_mega_check%ROWTYPE;

заработало.
Невкурю, как работало раньше...

Раньше работал примерно следующим образом: при первой компиляции функции был создан встроенный тип (абсолютно прозрачно для тебя), который и фигурировал в запросах. Впоследствии, после добавления в таблицу новой записи, тип уже стал несовместим с таблицей.

Снова оно заработало не после того, как ты изменил (кстати, абсолютно правильно) тип переменной, а после того, как ты ВНОВЬ ПЕРЕКОМПИЛИРОВАЛ функцию, и она снова создала требуемые типы.
...
Рейтинг: 0 / 0
Ошибка SETOF-функции
    #33782818
Hordi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кувалдин Роман[quot Hordi]Снова оно заработало не после того, как ты изменил (кстати, абсолютно правильно) тип переменной, а после того, как ты ВНОВЬ ПЕРЕКОМПИЛИРОВАЛ функцию, и она снова создала требуемые типы.

Да я тоже так подумал, поэтому специально удалял первую функцию, создавал ее заново, перегружал постгрес... Компиляция что, осталась после удаления функции?
...
Рейтинг: 0 / 0
Ошибка SETOF-функции
    #33782989
Алексей Ключников
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кувалдин Роман HordiЗаменил на
rec_ t_mega_check%ROWTYPE;

заработало.
Невкурю, как работало раньше...

Раньше работал примерно следующим образом: при первой компиляции функции был создан встроенный тип (абсолютно прозрачно для тебя), который и фигурировал в запросах. Впоследствии, после добавления в таблицу новой записи, тип уже стал несовместим с таблицей.

Снова оно заработало не после того, как ты изменил (кстати, абсолютно правильно) тип переменной, а после того, как ты ВНОВЬ ПЕРЕКОМПИЛИРОВАЛ функцию, и она снова создала требуемые типы.

Мое imho что все не так :)
Дайте ссылку на документацию где описано как компилируется функция.

По моим субъективным наблюдениям, компиляции функции вообще не происходит.
Так как я в любой момент могу вызвать тело функции со всеми своими коментариями и особенностями написания, вплоть до кол-ва пробелов.
Еще раз повторюсь что это субьективное ощущение, поэтому жду опровержений.
...
Рейтинг: 0 / 0
Ошибка SETOF-функции
    #33783282
wbear
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
скорее всего просто план который построил pgplsql остался в пределах сесии..

и именно он выдавал ошибку.. т.к. известно (покрайней мере в 7.4) что плян не реагирует на смену структуры таблици. про 8ку невкурсе.. но в 7ке это точно точно..можно проверить в psqlе:


#prepare my_plan select * from table;
#alert table add column xxx;
#execute my_plan;
...
Рейтинг: 0 / 0
Ошибка SETOF-функции
    #33783334
Hordi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 wbear:
Однозначно не одна сессия - перезакрывал, и неоднократно.
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Ошибка SETOF-функции
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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