【问题标题】:ERROR: syntax error at or near "INTEGER" LINE 2: v_stage INTEGER:=0;错误:“INTEGER”第 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。

标签: postgresql string-matching fuzzy-search


【解决方案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 函数。我也会在函数之外运行查询,因为它有问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-24
  • 2017-02-20
  • 1970-01-01
  • 2023-02-13
  • 2021-07-07
相关资源
最近更新 更多