Ошибка PostgreSQL — SQL [42601]: ОШИБКА: запрос не имеет назначения для результирующих данных

#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 ...;