Postgresql:在 plpgsql 中的临时 table 上执行更新不起作用
Postgresql: execute update on a temporary table in plpgsql is not working
我正在尝试更新我创建的临时 table 中的字段。
临时 table 的代码如下所示:
CREATE OR REPLACE FUNCTION insertTable ()
RETURNS VOID AS $$
BEGIN
execute 'create temporary table myTable (id INTEGER, value TEXT) on commit preserve rows';
execute 'insert into myTable values(1, NULL)';
end if;
end;
$$ LANGUAGE plpgsql;
接下来我尝试使用以下函数更新提交的值:
CREATE OR REPLACE FUNCTION setValue (msg TEXT)
RETURNS VOID AS $$
BEGIN
EXECUTE format('UPDATE myTable SET value = value || WHERE id = '|| quote_literal(1))USING msg;
END;
$$ LANGUAGE plpgsql;
但是它不起作用,值字段保持为空。
我用已经存在的 table(不是临时的)尝试了相同的代码,代码按预期工作。
我在文档中搜索了更新临时文件和普通文件之间的区别 table,但没有找到任何区别。
我希望你能帮助我。
在此先感谢您的帮助。
编辑:编辑了 table
的名称
该问题与临时 table 无关。问题是您要更新的列实际上是空的。您尝试通过将列的值与另一个文本连接来更新此列,但是,由于该值本身为空,因此连接后的值也为空。
这个查询:
SELECT null||'some text';
returns 空。还有这个更新声明:
UPDATE xmlBuffer SET value = value || 'some text';
不会更新实际内容为空的行。您可以通过多种方式解决此问题,具体取决于您的需要。例如,您可以在第二个函数中使用 COALESCE
语句,使用空字符串作为后备值(此外,quote_literal
和 format
语句不是必需的):
CREATE OR REPLACE FUNCTION setValue (msg TEXT)
RETURNS VOID AS $$
BEGIN
EXECUTE 'UPDATE xmlBuffer SET value = COALESCE(value,'''') || WHERE id = '|| 1
USING msg;
END;
$$ LANGUAGE plpgsql;
我正在尝试更新我创建的临时 table 中的字段。
临时 table 的代码如下所示:
CREATE OR REPLACE FUNCTION insertTable ()
RETURNS VOID AS $$
BEGIN
execute 'create temporary table myTable (id INTEGER, value TEXT) on commit preserve rows';
execute 'insert into myTable values(1, NULL)';
end if;
end;
$$ LANGUAGE plpgsql;
接下来我尝试使用以下函数更新提交的值:
CREATE OR REPLACE FUNCTION setValue (msg TEXT)
RETURNS VOID AS $$
BEGIN
EXECUTE format('UPDATE myTable SET value = value || WHERE id = '|| quote_literal(1))USING msg;
END;
$$ LANGUAGE plpgsql;
但是它不起作用,值字段保持为空。
我用已经存在的 table(不是临时的)尝试了相同的代码,代码按预期工作。
我在文档中搜索了更新临时文件和普通文件之间的区别 table,但没有找到任何区别。 我希望你能帮助我。
在此先感谢您的帮助。
编辑:编辑了 table
的名称该问题与临时 table 无关。问题是您要更新的列实际上是空的。您尝试通过将列的值与另一个文本连接来更新此列,但是,由于该值本身为空,因此连接后的值也为空。
这个查询:
SELECT null||'some text';
returns 空。还有这个更新声明:
UPDATE xmlBuffer SET value = value || 'some text';
不会更新实际内容为空的行。您可以通过多种方式解决此问题,具体取决于您的需要。例如,您可以在第二个函数中使用 COALESCE
语句,使用空字符串作为后备值(此外,quote_literal
和 format
语句不是必需的):
CREATE OR REPLACE FUNCTION setValue (msg TEXT)
RETURNS VOID AS $$
BEGIN
EXECUTE 'UPDATE xmlBuffer SET value = COALESCE(value,'''') || WHERE id = '|| 1
USING msg;
END;
$$ LANGUAGE plpgsql;