下面是我的功能,即使有一个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)
答案 0 :(得分:1)
存在多个问题:
取消绑定查询的结果不是Postgres中函数的结果。您需要使用INTO clause
。
regexp_split_to_array
是标量函数,没有任何理由从SELECT
语句调用此函数。仅当获取表函数的结果或需要从关系中读取数据时,才使用SELECT
。
assign语句基于:=
符号。命令SET
用于其他用途。
函数参数的类型为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;