我想在postgresql中运行该语句
CREATE OR REPLACE FUNCTION dynamic_update(nazwa_t text,index int,nazwa_k text, war text )
RETURNS void LANGUAGE PLPGSQL AS $$
BEGIN
EXECUTE 'UPDATE schemat.' || $1 || ' set ' || $3 || ' = ' || $4 || ' where id = ' || $2 || ' ;';
END
$$;
但是我有问题,因为在4参数上没有''执行,有谁知道如何欺骗这个?我尝试了我所知道的一切,但仍然处于死点。我会感激任何帮助:)
答案 0 :(得分:1)
您可以在这些情况下使用quoting functions,特别是:
quote_ident(string text)
返回适当引用的给定字符串,以用作SQL语句字符串中的标识符。
和
quote_literal(string text)
返回适当引用的给定字符串,以用作SQL语句字符串中的字符串文字。嵌入式单引号和反斜杠适当加倍。请注意,quote_literal
在null输入时返回null;如果参数可能为null,quote_nullable
通常更合适。
还有一个quote_literal
可以处理非文本值。
所以你可以这么说:
EXECUTE 'UPDATE schemat.' || quote_ident($1) || ' set ' || quote_ident($3) || ' = ' || quote_literal($4) || ' where id = ' || quote_literal($2) || ' ;';
如果您希望$2
为NULL,那么,如quote_literal
文档中所述,请改用quote_nullable
。