如果searchTerm
存在于其中一列内的任何位置,则尝试创建一个将从表中返回多行的函数。 (我是Postgres的新手。)
CREATE OR REPLACE FUNCTION dts_getProjects(searchTerm TEXT) RETURNS SETOF project
AS $$
SELECT credit_br AS Branch, status FROM job_project
WHERE credit_br LIKE '%'||searchTerm||'%'
$$
language 'sql';
我收到此错误:
ERROR: column "searchTerm" does not exist LINE 3: ...status FROM job_project WHERE credit_br LIKE '%'||searchTerm||'...
答案 0 :(得分:0)
它应该像这样工作:
CREATE OR REPLACE FUNCTION dts_get_projects(_search_term text)
RETURNS SETOF job_project AS
$func$
SELECT j.*
FROM job_project j
WHERE j.credit_br ILIKE '%' || _search_term || '%'
$func$ LANGUAGE sql;
我使用表类型返回整行。这是安全的后备,因为您没有透露任何数据类型或表定义。
我还使用ILIKE
来使搜索不区分大小写(只是猜测,你决定)。
这只搜索一个列credit_br
。您的说明听起来像是要搜索所有列(anywhere inside one of the columns
)。同样,大多数基本信息都缺失了。一种非常快速且略显肮脏的方法是搜索转换为text
的整个行表达式:
...
WHERE j::text ILIKE '%' || _search_term || '%';
...
相关:
旁白:
如果可以避免,请不要在Postgres中使用混合大小写标识符。
不要引用功能的语言名称。这是一个标识符。