#postgresql #plpgsql
#postgresql #plpgsql
Вопрос:
Я создаю функцию для обновления записей в моей таблице и вывода документа json на основе результата, однако я получаю сообщение об ошибке «нет назначения для результата».
Код, который я использую:
create or replace function update_frequency(_id int,_shipping_method_id int,_day_of_week frequency,_time_range timerange, _maximum_orders int, p_time_range timerange, out out_json json)
returns json as
$$
begin
select time_range into p_time_range from "_frequence" where id = _id;
if not found then
raise EXCEPTION '{"error":"frequence id not found"}';
else
if p_time_range = _time_range then
raise notice '{"error":"they are equal"}';
WITH upd1 AS (
update "_frequence" set
id = _id,
shipping_method_id = _shipping_method_id,
day_of_week = _day_of_week,
maximum_orders = _maximum_orders
where id = _id
RETURNING id,shipping_method_id, day_of_week, time_range,maximum_orders
)
select row_to_json(t) from (
Select id, shipping_method_id, day_of_week, time_range ,maximum_orders
FROM upd1 where upd1.id = id
)t;
out_json = row_to_json(t);
elseif (p_time_range amp;amp; _time_range) then
raise EXCEPTION '{"error":"they are overlapping"}';
else
WITH upd1 AS (
update "_frequence" set
id = _id,
shipping_method_id = _shipping_method_id,
day_of_week = _day_of_week,
time_range = _time_range,
maximum_orders = _maximum_orders
where id = _id
RETURNING id,shipping_method_id, day_of_week, time_range,maximum_orders
)
select row_to_json(t) from (
Select id, shipping_method_id, day_of_week, time_range ,maximum_orders
FROM upd1 where upd1.id = id
)t;
out_json = row_to_json(t);
end if;
end if;
end;
$$ LANGUAGE plpgsql;
Вызов функции выглядит следующим образом:
select * from update_frequency(5, 1, 'Tuesday', timerange(time '20:00', time '20:59', '[]'), 4,null);
Я получаю это:
Ошибка SQL [42601]: ОШИБКА: запрос не имеет назначения для данных результата Подсказка: если вы хотите отменить результаты выбора, используйте вместо этого ВЫПОЛНИТЬ. Где: функция PL / pgSQL update_frequency (целое число, целое число, частота, интервал времени, целое число, интервал времени) строка 10 в инструкции SQL
Я не уверен, что происходит не так, и мне понадобится чья-то помощь.
Ответ №1:
Вы должны включить назначение в запрос:
WITH (...)
SELECT row_to_json(t) INTO out_json
FROM ...;