【发布时间】:2021-01-03 08:29:44
【问题描述】:
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;
[...]
->错误:“整数”或附近的语法错误“总是出错!我不知道为什么” ->第 2 行:v_stage INTEGER:=0;
请能解决这个问题的人,我真的很感激......
使用评论中的代码更新:
DO
$$
DECLARE
v_stage INTEGER:=0;
RAISE NOTICE 'y';
RETURN QUERY
SELECT
1.0::FLOAT, v_stage, sex, birthdate, place, district, subdistrict, village, race, complexion, eyecolor, haircolor, height, weight, hp, mother, father, 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 $$ 之后,又出现了另一个错误:ERROR: syntax error at or near "SELECT" LINE 6: RETURN QUERY
CONTEXT:无效的类型名称“QUERY SELECT 1.0::FLOAT”
【问题讨论】:
-
一个
do块不能返回任何东西,所以return query开头是错误的。但我认为 PL/pgSQL 根本没有理由。只需运行该选择语句。但是您缺少一个BEGIN来生成有效的PL/pgSQL。complexion = p_complexion TEXT,也是无效的 SQL。
标签: postgresql string-matching fuzzy-search