所以,假设我有一个接受一个参数的函数
create function(i_param VARCHAR)
我想在表WHERE col_name LIKE 'i_param%'
我尝试了LIKE i_param||'%'
,但我认为它确实返回字符串'i_param'
而不是放入函数的值。
它不会给我任何错误但返回零行。我如何对输入参数进行LIKE
?
这个东西很新,所以任何帮助都会很棒!谢谢!
答案 0 :(得分:1)
作为一个注释,从9.2开始,你可以按照自己的方式做事。在以前的版本中,您应该收到错误。
您没有收到错误的事实表明您使用i_param
与列名冲突。我建议为此输入变量前缀(我在工作中使用“in_”)。
例如,如果您:
CREATE TABLE foo (
foo text,
bar text
);
然后以下内容不会产生错误:
CREATE FUNCTION search_foo(bar text) RETURNS SETOF foo LANGUAGE SQL AS $$
SELECT * FROM foo WHERE foo ilike bar || '%';
$$;
然而,这实际上是将列foo与列栏进行比较。以下内容将为您提供错误:
CREATE FUNCTION search_foo(in_bar text) returns setof foo language sql as $$
SELECT * from foo where foo ilike in_bar ||'%';
$$;
我强烈建议避免使用与参数同名的变量。这导致许多地方出现问题。