Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql:在plpgsql中的临时表上执行更新无效_Postgresql_Sql Update_Plpgsql_Execute_Temp Tables - Fatal编程技术网

Postgresql:在plpgsql中的临时表上执行更新无效

Postgresql:在plpgsql中的临时表上执行更新无效,postgresql,sql-update,plpgsql,execute,temp-tables,Postgresql,Sql Update,Plpgsql,Execute,Temp Tables,我正在尝试更新已创建的临时表中的字段 临时表的代码如下所示: 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; $

我正在尝试更新已创建的临时表中的字段

临时表的代码如下所示:

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 || $1 WHERE id = '|| quote_literal(1))USING msg;
END;
$$ LANGUAGE plpgsql;
但是,它不起作用,并且值字段保持为空

我用已经存在的表(不是临时表)尝试了相同的代码,代码按预期工作

我在文档中搜索了更新临时表和普通表之间的差异,但没有找到任何差异。 我希望你能帮我做这件事

提前感谢你的帮助


编辑:编辑表的名称

问题与临时表无关。问题是要更新的列实际上是空的。您试图通过将该列的值与另一个文本连接来更新该列,但由于该值本身为null,因此连接的值也为null

此查询:

SELECT null||'some text';
返回null。本更新声明还包括:

UPDATE xmlBuffer SET value = value || 'some text';
不会更新实际内容为空的行。根据需要,您可以通过多种方式解决此问题。在示例中,您可以在第二个函数中使用
COALESCE
语句,使用空字符串作为回退值(此外,
quote_literal
format
语句不是必需的):


您是否通过与第一个相同的物理连接调用第二个函数?如果您从两个不同的会话执行此操作,那么第二个会话当然不会看到第一个insertedIt工作的数据,谢谢。我不知道不能将空值与非空值连接起来。谢谢你的帮助。
CREATE OR REPLACE FUNCTION setValue (msg TEXT)
RETURNS VOID AS $$
BEGIN
  EXECUTE 'UPDATE xmlBuffer SET value = COALESCE(value,'''') || $1 WHERE id = '|| 1 
  USING msg;
END;
$$ LANGUAGE plpgsql;