我试图在postgres函数的查询中追加单引号,但是结果出错了,请看一下我的postgres函数
CREATE OR REPLACE function test() returns my_type as $$
declare rd varchar := '56';
declare personphone varchar := 'Philip Dannes';
declare result my_type;
declare SQL VARCHAR(300):=null;
BEGIN
-- Mandatory / Static part of the Query here
SQL = 'select pt.id from product_template pt inner join product_product pp on pt.id=pp.id where ';
IF rd IS NOT NULL
then
SQL = SQL || 'pp.radio_phone = '|| rd;
else
SQL = SQL || 'pp.radio_phone = '|| rd;
end if;
IF personphone IS NOT NULL
then
SQL = SQL || ' and pp.person_phone = '|| personphone;
else
SQL = SQL || ' and pp.person_phone = '|| personphone;
end if;
SQL = SQL || ';';
EXECUTE SQL;
return result;
END
$$ LANGUAGE plpgsql;
当我执行它时,它会给出“Philip Daves”的错误,并在附加为后返回查询
^{pr2}$我知道错误是因为56和Philip Dave不在单引号中,当我执行函数return query with single quote时,它工作得很好。在
如何在这个查询中追加单引号??在
我试着用这种方式
SQL = SQL || ' and pp.person_phone = '|| '' || personphone;
但是我函数返回相同的查询
希望你的建议
提前谢谢
你需要重写得很重。在
首先,使用},而不是手动引用。在
quote_ident
和{如果您使用的是更新的PostgreSQL版本,那么最好将}和{}说明符一起使用。在
format()
和{另外,尽量避免像那样迭代地构建字符串。尽可能使用带有
CASE
s的表达式进行构建没有必要做任何
varchar(300)
生意。只需使用text
。在您的
ELSE
子句似乎包含与您的IF ... THEN
相同的内容。我已经把它们移走了。在尝试使用
RETURN QUERY EXECUTE
或者,如果只得到一个值,EXECUTE ... INTO
。在见the manual for info on ^{} and ^{} 。在
相关问题 更多 >
编程相关推荐