如何在PostgreSQL函数中为变量赋值另一函数的计算结果
问题解决:PL/pgSQL变量声明与函数返回错误
错误原因分析
你遇到的语法错误源于以下几个问题:
- PL/pgSQL的变量声明语法错误:变量类型应该放在变量名之前,且需要在
DECLARE块中声明变量 - 语句末尾缺少分号:PL/pgSQL要求每条语句必须以分号结尾
- 返回集合类型结果的方式错误:返回
SETOF类型时,需要用RETURN QUERY执行查询并返回结果
修正后的代码
DROP FUNCTION IF EXISTS search_exercises(text); CREATE OR REPLACE FUNCTION search_exercises(search_term text) RETURNS SETOF "Exercise" LANGUAGE plpgsql AS $$ DECLARE foo tsquery := websearch_to_tsquery('simple', search_term); -- 正确的变量声明与赋值 BEGIN RETURN QUERY -- 使用RETURN QUERY返回查询结果集 SELECT * FROM "Exercise" WHERE foo @@ document ORDER BY ts_rank("document", foo) DESC; END; $$;
关键修改说明
- 添加
DECLARE块:PL/pgSQL中变量必须在DECLARE段声明,语法为变量名 类型 [:= 初始值]; - 为所有语句补充分号:包括变量赋值语句和查询语句的结尾
- 使用
RETURN QUERY:因为函数返回SETOF "Exercise",该语句会执行查询并将结果集返回给调用者
内容的提问来源于stack exchange,提问作者Julio Ramirez
相关产品推荐
相关产品推荐

