powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Вызов функции с отбразыванием результата
10 сообщений из 10, страница 1 из 1
Вызов функции с отбразыванием результата
    #39506215
Dengee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго времени, коллеги.
Заранее прошу прощения за тривиальный вопрос. Видел темы и тут, и stackoverflow читал, однако представленные решения, в т.ч. отмеченные решёнными (на stackoverflow) у меня не работают.

Есть функция.
Код: plsql
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.
CREATE OR REPLACE FUNCTION public.do_something(
    mon date,
    some_id character varying)
  RETURNS void AS
$BODY$
declare
	sql_query text;
begin
        delete from some_table 
        using another table
	where some_table.id = another_table.id 
                 and same_month(do_something.mon, another_table.some_date::date);

	select sql_query = format('
	insert into some_table (id, some_value)
        select  another_table.id, %s
        from    another_table
        where  some_id = %L
                  and same_month(%L, another_table.some_date::date);', formula, do_something.some_id, do_something.mon)
        from    rules_table
        where  rule_table.some_id = do_something.some_id
        limit 1;

	execute(sql_query);

	return ;
end
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;



Пытаюсь вызвать функцию:
Код: plsql
1.
2.
3.
4.
DO $$
BEGIN
	PERFORM do_something('2017-08-01'::date, '123123123');
END$$ LANGUAGE plpgsql;



И получаю от сервера следующее:

ОШИБКА: в запросе нет назначения для данных результата
SQL-состояние: 42601
Подсказка: Если вам нужно отбросить результаты SELECT, используйте PERFORM.
Контекст: функция PL/pgSQL do_something(date,character varying), строка 8, оператор SQL-оператор
SQL-оператор: "SELECT do_something('2017-08-01'::date, '123123123')"
функция PL/pgSQL inline_code_block, строка 3, оператор PERFORM

И это выводит меня из равновесия. Искать устал. Кто-то может подсказать, в чём может быть дело?

P.S. Я вижу, тут модно в документацию носом тыкать, поэтому сразу оставлю это здесь - https://postgrespro.ru/docs/postgresql/9.6/plpgsql-statements
Чтение не приносит плодов, - потому что не работает, как описано в документации.
...
Рейтинг: 0 / 0
Вызов функции с отбразыванием результата
    #39506228
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dengee,

а зачем вам в 8 строчке
select sql_query = format('

слово select?????

sql_query := format(....


(: перед = не обязательно но лучше использовать)

Вам же база явно указала в какой строчке ошибка.


--
Maxim Boguk
dataegret.ru
...
Рейтинг: 0 / 0
Вызов функции с отбразыванием результата
    #39506262
p2.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DengeeЧтение не приносит плодовТак тут тоже ответы пишут буквами. Может на ютубе ответы в формате аудио-видео повлияют на твою плодовитость.
...
Рейтинг: 0 / 0
Вызов функции с отбразыванием результата
    #39506286
Dengee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maxim BogukDengee,
а зачем вам в 8 строчке
select sql_query = format('


Затем, что в функцию format() должно передаваться значение из таблицы rules_table.
Простой оператор присваивания может в таблицы без селекта заглядывать?
Прошу прощения, сильно привыкший к tsql.
...
Рейтинг: 0 / 0
Вызов функции с отбразыванием результата
    #39506287
Dengee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
p2.DengeeЧтение не приносит плодовТак тут тоже ответы пишут буквами. Может на ютубе ответы в формате аудио-видео повлияют на твою плодовитость.

Так и написали бы буквами ответ. А язвить могли бы на своём ютубе в комментариях.
...
Рейтинг: 0 / 0
Вызов функции с отбразыванием результата
    #39506296
Dengee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maxim Boguk,

благодарю, вы указали верное направление. Редакция указанной строки в таком виде:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
select format('
	insert into a3f_reward (
		aid,
		reward
	)
	select  "TransID", 
                %s
        from    a3f
        where   "PartAIN" = %L
                and same_month(%L, a3f."ConfirmDate"::date);', formula, ain, mon)
	from	a3f_reward_rules
	where	a3f_reward_rules.ain = part_ain
	limit 1 into sql_query;



решила проблему с ошибкой. Но нисколько не приблизила к пониманию того, почему PERFORM отказывался отбрасывать результаты. Или почему СУБД ругалось именно в таком ключе.
...
Рейтинг: 0 / 0
Вызов функции с отбразыванием результата
    #39506300
daevy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dengee,

а зачем вы вызываете её через DO? чем не устраивает select do_something(...); ?
...
Рейтинг: 0 / 0
Вызов функции с отбразыванием результата
    #39506304
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DengeeMaxim Boguk,

решила проблему с ошибкой. Но нисколько не приблизила к пониманию того, почему PERFORM отказывался отбрасывать результаты. Или почему СУБД ругалось именно в таком ключе.

PERFORM нормально все отбрасывал.
База ругалась на 8 строку
select sql_query = format('

"
Подсказка: Если вам нужно отбросить результаты SELECT, используйте PERFORM.
Контекст: функция PL/pgSQL do_something(date,character varying), строка 8, оператор SQL-оператор
"

говоря вам что в ЭТОМ ВОТ select sql_query - некуда вернуть результат что собственно и происходило.


--
Maxim Boguk
dataegret.ru
...
Рейтинг: 0 / 0
Вызов функции с отбразыванием результата
    #39506310
Dengee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maxim Boguk,

Спасибо.
...
Рейтинг: 0 / 0
Вызов функции с отбразыванием результата
    #39506313
Dengee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
daevyDengee,

а зачем вы вызываете её через DO? чем не устраивает select do_something(...); ?

Это сильно сокращённый кусок длинной строки в python. =)
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Вызов функции с отбразыванием результата
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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