Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.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 博士后:while;表中有行“;环_Postgresql_While Loop_Is Empty - Fatal编程技术网

Postgresql 博士后:while;表中有行“;环

Postgresql 博士后:while;表中有行“;环,postgresql,while-loop,is-empty,Postgresql,While Loop,Is Empty,比如说,我们有下表my_表: id Col1 Col2 1 some data some data 2 some data some data 3 some data some data 4 some data some data 另外,让我们假设有一个表的更新过程,在执行之后,表的行数减少 我们希望迭代这个过程,直到“my_table”没有行为止。可以肯定的是,在更新过程的有限次迭代之后,表中没有行 这样做有多正确:

比如说,我们有下表my_表:

id   Col1         Col2
1    some data    some data
2    some data    some data 
3    some data    some data  
4    some data    some data
另外,让我们假设有一个表的更新过程,在执行之后,表的行数减少

我们希望迭代这个过程,直到“my_table”没有行为止。可以肯定的是,在更新过程的有限次迭代之后,表中没有行

这样做有多正确:

while (select count(id) from my_table) != 0 loop
  update process
  ...;
end loop;

您需要添加事务以使其可靠,否则您无法保证其他用户或进程不会在您计算它们之后但在更新运行之前添加行。您实际上需要:

while not done
   begin transaction
      if (count rows > 0)
         do something that expects rows
      else
         done
   end transaction

SQL中的更新不会删除记录,它们(可能)会修改已存在记录中的数据。是的,你说得对。我没有提到更新过程不仅涉及“My_表”,还涉及“other_表”。更新后者会导致第一行中的行数减少。谢谢你的评论,但下面的答案抓住了要点。