可以在执行语句中添加''(PSQL)

时间:2013-05-23 17:13:02

标签: sql postgresql

我想在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参数上没有''执行,有谁知道如何欺骗这个?我尝试了我所知道的一切,但仍然处于死点。我会感激任何帮助:)

1 个答案:

答案 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