问题描述
DECLARE
v_stage INTEGER:=0;
[...]
RETURN QUERY
SELECT 1.0::FLOAT,v_stage,sex,birthdate,place,district,subdistrict,village,race,complexion,eyecolor,haircolor,height,weight,hp,mother,father,picture,sidenote,mannerism,name,method,crimetype,SUSPECT_id
FROM public.SUSPECT
WHERE complexion = p_complexion TEXT,AND CASE WHEN p_eyecolor IS NOT NULL THEN eyecolor = p_eyecolor ELSE true END
AND CASE WHEN p_haircolor IS NOT NULL THEN haircolor = p_haircolor ELSE true END
AND CASE WHEN p_height FLOAT IS NOT NULL THEN height = p_height ELSE true END
AND CASE WHEN p_weight FLOAT IS NOT NULL THEN weight = p_weight ELSE true END
AND CASE WHEN p_sex IS NOT NULL THEN sex = p_sex ELSE true END
AND CASE WHEN p_sidenote TEXT IS NOT NULL THEN sidenote = p_sidenote ELSE true END
AND CASE WHEN p_mannerism TEXT IS NOT NULL THEN mannerism = p_mannerism ELSE true END
AND CASE WHEN p_method TEXT IS NOT NULL THEN method = p_method ELSE true END
AND CASE WHEN p_crimetype TEXT IS NOT NULL THEN crimetype = p_crimetype ELSE true END;
[...]
->错误:“ INTEGER”或附近的语法错误“总是知道该错误!我不知道为什么” ->第2行:v_stage INTEGER:= 0;
请能解决这个问题的人,我真的很感激...
使用注释中的代码更新:
DO
$$
DECLARE
v_stage INTEGER:=0;
RAISE NOTICE 'y';
RETURN QUERY
SELECT
1.0::FLOAT,picture
FROM
public.SUSPECT
WHERE
complexion = p_complexion TEXT,AND
CASE WHEN
p_eyecolor IS NOT NULL
THEN
eyecolor = p_eyecolor
ELSE
true
END
AND
CASE WHEN
p_haircolor IS NOT NULL
THEN
haircolor = p_haircolor
ELSE
true
END;
END$$;
在DECLARE之前添加DO $$之后,又出现了另一个错误:错误:“ SELECT”第6行或附近的语法错误:返回查询
上下文:无效的类型名称“ QUERY SELECT 1.0 :: FLOAT”
解决方法
这可行:
DO $$
DECLARE
v_stage INTEGER:=0;
BEGIN
RAISE NOTICE 'test';
END$$;
NOTICE: test
DO
因此,我要说的是DECLARE
之前的内容。将函数的开始部分添加到您的代码示例中。