PostgreSQL-错误:查询没有结果数据的目标
为什么会出现以下错误?: 错误:查询没有结果数据的目标 这是我的职责:PostgreSQL-错误:查询没有结果数据的目标,sql,postgresql,Sql,Postgresql,为什么会出现以下错误?: 错误:查询没有结果数据的目标 这是我的职责: CREATE OR REPLACE FUNCTION public.SumASCII( value character varying) RETURNS int LANGUAGE 'plpgsql' COST 100.0 VOLATILE NOT LEAKPROOF AS $function$ DECLARE finalResult int; DECLARE tem
CREATE OR REPLACE FUNCTION public.SumASCII(
value character varying)
RETURNS int
LANGUAGE 'plpgsql'
COST 100.0
VOLATILE NOT LEAKPROOF
AS $function$
DECLARE finalResult int;
DECLARE tempChar character;
DECLARE valueLength int;
DECLARE tempResult int;
BEGIN
SELECT LENGTH(value) INTO valueLength;
SELECT finalResult = 0;
SELECT tempResult = 0;
DO
$do$
BEGIN
FOR i IN 1..valueLength LOOP
SELECT SUBSTRING(value, i, 1) INTO tempChar;
SELECT ASCII(tempChar) INTO tempResult;
SELECT finalResult += tempResult;
END LOOP;
END
$do$;
RETURN finalResult;
END;
$function$;
CREATE OR REPLACE FUNCTION public.sumascii(varchar)
RETURNS bigint AS $$
SELECT sum(ascii(c)) FROM regexp_split_to_table($1,'') g(c);
$$ LANGUAGE SQL IMMUTABLE;
我看过其他有同样错误的问题,但它们似乎与我的问题无关。我相信答案很简单,但我就是看不出这里有什么问题。。我声明了一个int,并返回了一个int
按如下方式调用函数:
SELECT SumASCII('abc')
通过大量简化,我可以使它工作。我相信
DECLARE
只需要使用一次(示例在),我不确定您试图用do
…END
块做什么,但我只是取出了它
CREATE OR REPLACE FUNCTION public.SumASCII(
value character varying)
RETURNS int
LANGUAGE 'plpgsql'
COST 100.0
VOLATILE NOT LEAKPROOF
AS $function$
DECLARE
finalResult int := 0;
BEGIN
FOR i IN 1..LENGTH(value) LOOP
finalResult := finalResult + ASCII(SUBSTRING(value, i, 1));
END LOOP;
RETURN finalResult;
END;
$function$;
SELECT SumASCII('abc')
正在返回294
在PLpgSQL中Fortran样式是错误样式-任何表达式都是SELECT
。嵌入的越多,选择的s越慢。simple one SQL可以完成的事情应该由simple SQL完成(在100%的情况下不是这样(可能取决于单个表达式)-例如@mike.k代码比my快3倍:循环中只有一个简单表达式,我的代码有一个通用查询和非常慢的regexpr函数):
SQL(以及PostgreSQL)中的标识符不区分大小写,因此不适合使用驼峰符号
当函数的结果在时间上是不可变的(对于给定的参数),那么该函数应该标记为不可变
,在plpgsql中使用DO语句是无意义的。更新的使用SELECT而不是assign语句:=
。选择是完全不必要的:语言名称是一个标识符,它不应该用单引号引起来:语言plpgsql
是正确的(只接受单引号是为了向后兼容)@a_horse_没有名称,好眼力。我跳过了创建部分,选择了主体。