"query has no destination for result data" 错误,即使在函数中有 return 之后

"query has no destination for result data" error even after having return in the function

下面是我的函数,即使在有 RETURN 语句之后,但是

query has no destination for result data

抛出错误。我错过了什么吗?

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. 解除绑定查询的结果不是 Postgres 中函数的结果。您需要使用 INTO clause

  2. regexp_split_to_array 是标量函数,没有任何理由从 SELECT 语句中调用此函数。 SELECT 仅当您获取 table 函数的结果时,或者当您需要从关系中读取数据时使用。

  3. plpgsql中的assign语句是基于:=符号的。命令SET用于不同的东西。

  4. 函数参数的类型 textvarchar 不同。

因此您的代码可以如下所示:

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;