powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / EXECUTE ... INTO ошибка
11 сообщений из 11, страница 1 из 1
EXECUTE ... INTO ошибка
    #34239472
serejaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть такая функция:
------------
CREATE OR REPLACE FUNCTION container_category_name(int4,varchar)
RETURNS "varchar" AS
$BODY$
DECLARE
container_id ALIAS FOR $1;
get_lang ALIAS FOR $2;
rec record;
query varchar;
cat_name varchar;
BEGIN

query:= 'select name_' || get_lang || ' From cargo_category Where id=' container_id;

EXECUTE query INTO rec;

cat_name = rec.name;

RETURN cat_name;

END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE;
ALTER FUNCTION container_category_name(int4,varchar) OWNER TO postgres;
------------

Где ошибка?:

-------------
select container_category_name(754,'ru')
-------------

ERROR: record "rec" is not assigned yet
DETAIL: The tuple structure of a not-yet-assigned record is indeterminate.
CONTEXT: PL/pgSQL function "container_category_name" line 18 at execute statement
...
Рейтинг: 0 / 0
EXECUTE ... INTO ошибка
    #34239791
СергейК
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
serejaa

ERROR: record "rec" is not assigned yet
DETAIL: The tuple structure of a not-yet-assigned record is indeterminate.
CONTEXT: PL/pgSQL function "container_category_name" line 18 at execute statement


Ia podozrevau, chto delo v tom, chto v dannom sluchae vash SELECT, kotoryy EXECUT'itsia ne vozvrashaet ni odnoi stroki. ( k tomu je, esli daje esli ona i budet vozvrashat' Vash kod rabotat' ne budet ... -- rec.name ne budet rabotat')

I voobshe ia Vam rekomenduiu opredelit' peremennuiu rec tipom varchar, a ne record, i vozvrashat' priamo ee -- togda vse doljno normalno srabotat'.
...
Рейтинг: 0 / 0
EXECUTE ... INTO ошибка
    #34239808
Jelis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
И почему вы пытаетесь присвоить rec.name когда из запроса возвращаеться поле с именем 'name_' || getl_lang ? Тогда уж стоить добавить AS name
...
Рейтинг: 0 / 0
EXECUTE ... INTO ошибка
    #34240944
serejaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Теперь дроугая ошибка,

------------------
CREATE OR REPLACE FUNCTION container_category_name(int4, "varchar") RETURNS "varchar" AS
$BODY$
DECLARE
container_id ALIAS FOR $1;
get_lang ALIAS FOR $2;
rec record;
query varchar;
cat_name varchar;
BEGIN

query:= 'select name_' || get_lang || ' as name From cargo_category Where id=' || container_id;
EXECUTE query INTO cat_name;
--cat_name = rec.name;
RETURN cat_name;

END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE;
-----------------

ERROR: syntax error at or near "$2" at character 20
QUERY: SELECT $1 INTO $2
CONTEXT: PL/pgSQL function "container_category_name" line 18 at execute statement


запрос возвращает значение, я проверил.
...
Рейтинг: 0 / 0
EXECUTE ... INTO ошибка
    #34241377
Jelis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Посмотрите перед executom чего у вас реально в query получаеться, и попробуйте именно это отдельно запустить.
Код: plaintext
1.
 raise notice '%', query;
При первом варианте попробуйте проверить FOUND в скрипте, что б точно убедиться что что-то взвращаеться.
...
Рейтинг: 0 / 0
EXECUTE ... INTO ошибка
    #34243031
serejaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
raise notice '%', query;

делал, копировал и выполнял запрос - возвращает.


а это не работает:

EXECUTE query INTO rec ; -- т.к. ошибка появляется в этой строке

IF FOUND THEN
RAISE NOTICE 'fiund';
END IF;
...
Рейтинг: 0 / 0
EXECUTE ... INTO ошибка
    #34243063
serejaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ошибка появляется именно когда я пишу

EXECUTE query into rec;

Если просто:
EXECUTE query; -- то ошибки нет



ERROR: record "rec" is not assigned yet
...
Рейтинг: 0 / 0
EXECUTE ... INTO ошибка
    #34243157
st_serg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
попробуте через курсор
Код: plaintext
1.
open mycur for execute 'blablabla';
какая у вас версия пг? судя по докам execute ... into ... появился только в 8.1.х
...
Рейтинг: 0 / 0
EXECUTE ... INTO ошибка
    #34243231
serejaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
получилось курсором! thanks!
...
Рейтинг: 0 / 0
EXECUTE ... INTO ошибка
    #34243413
Jelis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Так а какая версия ПГ?
...
Рейтинг: 0 / 0
EXECUTE ... INTO ошибка
    #34246658
serejaa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
версия 8.0.3, не поддерживается EXECUTE INTO наверное
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / EXECUTE ... INTO ошибка
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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