错误:“INTEGER”第 2 行或附近的语法错误:v_stage INTEGER:=0;
Posted
技术标签:
【中文标题】错误:“INTEGER”第 2 行或附近的语法错误:v_stage INTEGER:=0;【英文标题】:ERROR: syntax error at or near "INTEGER" LINE 2: v_stage INTEGER:=0; 【发布时间】: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。
【参考方案1】:
这行得通:
DO $$
DECLARE
v_stage INTEGER:=0;
BEGIN
RAISE NOTICE 'test';
END$$;
NOTICE: test
DO
所以我要说它是DECLARE
之前的东西。将函数的开头部分添加到您的代码示例中。
【讨论】:
感谢您的回复。我按照你说的做了,但是,出现了另一个错误:错误:在“[”或附近出现语法错误第 5 行:[...] 然后我尝试删除 [...] 然后再次错误:错误:语法“SELECT”第 6 行或附近出现错误:返回查询 ^ 上下文:类型名称无效“QUERY SELECT 1.0::FLOAT” DO $$ DECLARE v_stage INTEGER:=0;提高通知'y';返回查询选择 1.0::FLOAT、v_stage、性别、出生日期、地点、地区、街道、村庄、种族、肤色、眼睛颜色、头发颜色、身高、体重、hp、母亲、父亲、图片来自 public.crime WHERE 肤色 = 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;结束$$;在我在 DECLARE 之前添加 DO $$ 之后,又出现了另一个错误:错误:在“SELECT”第 6 行或附近出现语法错误:返回查询 @AdrianKlaver 我将上面的内容添加到应该在哪里出现的问题中,并对其进行了格式化以使其可读。 我做错了什么?为什么它在“RETURN QUERY SELECT 1.0:: FLOAT”附近出现错误请帮我解决它... 看看here 了解如何构建 plpgsql 函数。我也会在函数之外运行查询,因为它有问题。以上是关于错误:“INTEGER”第 2 行或附近的语法错误:v_stage INTEGER:=0;的主要内容,如果未能解决你的问题,请参考以下文章
尝试使用 if 语句创建函数时出现 Postgresql 语法错误
MySQL Workbench:查询中的错误(1064):第 1 行的“VISIBLE”附近的语法错误