即使在函数中返回后,“查询没有结果数据的目标”错误

时间:2019-05-07 09:31:52

标签: postgresql plpgsql

下面是我的功能,即使有一个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 个答案:

答案 0 :(得分:1)

存在多个问题:

  1. 取消绑定查询的结果不是Postgres中函数的结果。您需要使用INTO clause

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

  3. plpgsql中的
  4. assign语句基于:=符号。命令SET用于其他用途。

  5. 函数参数的类型为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;