错误:“ INTEGER”处或附近的语法错误第2行:v_stage INTEGER:= 0;

问题描述

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之前的内容。将函数的开始部分添加到您的代码示例中。