我是 pl/pgsql 的新手,正在尝试创建动态查询。我现在拥有的是用于测试的基本参数组合。当它正常工作时,我会逐渐添加更多的动态部分,以创建一个动态的、多合一的查询。
问题是这应该可以工作,但是我search_creator
在 pgadmin4 中看到一个空的数据输出。这是代码
CREATE FUNCTION search_creator(creator text)
RETURNS TABLE(place_id bigint, place_geom geometry, event_name character(200)) AS
$$
BEGIN
RETURN QUERY EXECUTE
'SELECT place.id, place.geom, event.name
FROM person
JOIN event_creator ON event_creator.person_id = person.id
JOIN event ON event.id = event_creator.event_id
JOIN cep ON cep.event_id = event.id
JOIN place ON place.id = cep.place_id
WHERE person.name LIKE $1'
USING creator;
END;
$$
LANGUAGE plpgsql;
这就是我调用函数的方式select search_creator('mike');
。
如果有帮助,在数据库中,该person.id
列是 type character(200)
。
如果它有帮助,当我修改函数以接受int
作为输入并将WHERE
部分更改为 时WHERE person.id = $1
,它可以正常工作。我可以在 pgadmin 输出中看到实际结果。
我的文本变量有什么问题?是语法吗?
另外,我该怎么做WHERE person.name LIKE '%$1%'
?