0

我想在 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 参数,有人知道如何欺骗吗?我尝试了我所知道的一切,但仍然停留在死角。我将不胜感激任何帮助:)

4

1 回答 1

1

在这些情况下,您可以使用一些引用函数,特别是:

quote_ident(string text)
返回适当引用的给定字符串,以用作 SQL 语句字符串中的标识符。

quote_literal(string text)
返回适当引用的给定字符串,以用作 SQL 语句字符串中的字符串文字。嵌入的单引号和反斜杠被适当地加倍。请注意,quote_literal在 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改用。

于 2013-05-23T18:30:02.823 回答