Ошибка «запрос не имеет места для данных результата» даже после возврата в функцию - PullRequest
0 голосов
/ 07 мая 2019

Ниже приведена моя функция, даже после оператора RETURN, но

запрос не имеет назначения для данных результата

выдается ошибка. Я что-то пропустил?

CREATE OR REPLACE FUNCTION test(ulds character varying)
 RETURNS boolean AS
 $BODY$
 DECLARE
 val_result boolean;
 BEGIN
           select * from regexp_split_to_array('BLK&AAK&AKE', '&');
           SET val_result = false;

 RETURN val_result;       
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
ALTER FUNCTION test(character varying)

1 Ответ

1 голос
/ 08 мая 2019

Существует более одной проблемы:

  1. Результат запросов отмены привязки не является результатом функции в Postgres.Вам нужно использовать INTO clause.

  2. regexp_split_to_array - скалярная функция, нет причин вызывать эту функцию из оператора SELECT.Используйте SELECT только тогда, когда вы берете результат табличной функции или когда вам нужно прочитать данные из отношений.

  3. оператор назначения в plpgsql основан на символе :=.Команда SET используется для чего-то другого.

  4. тип text предлагается вместо varchar для параметров функции.

Так ваш код может выглядеть так:

CREATE OR REPLACE FUNCTION test(ulds text)
RETURNS boolean AS $$
DECLARE
  result boolean;
  target text[];
BEGIN
  -- suboptimal, don't do this!!!
  SELECT regexp_split_to_array('BLK&AAK&AKE', '&') INTO target;

  -- preferred
  target := regexp_split_to_array('BLK&AAK&AKE', '&');

  result := true;
  RETURN result;
END;
$$ LANGUAGE plpgsql;
...