Обновление однострочной таблицы в цикле pl/pgsql-while

#sql #postgresql #plpgsql

Вопрос:

 create table data(a1 float, a2 float);
insert into data values(1::float, 1::float);

do $
declare 
   counter integer := 0;
begin
   while counter < 50 loop
      --SAVE THIS INTO DATA      
      SELECT a1-0.1*random(),
              a2-0.1*random()
      from data group by a1, a;
      --SAVE THIS INTO DATA (END)
      counter := counter   1;
   end loop;
end$;
 

Я хотел бы сохранить значения a1 и a2 в первом кортеже данных. (В основном текущий подсчет)

Как я могу сохранить результат a SELECT в существующей таблице?

Ответ №1:

Это было бы проще с a PRIMARY KEY на столе:

 create table data(id int primary key, a1 float, a2 float);
insert into data values(1, 1, 1);
select * from data;
 id | a1 | a2 
---- ---- ----
  1 |  1 |  1

update data set a1 = a1 - 0.1*random(), a2 = a2 - 0.1*random() where id =1;
select * from data;
 id |         a1         |        a2        
---- -------------------- ------------------
  1 | 0.9039355377682678 | 0.98859843416964

 

Затем включите UPDATE его в контур счетчика:

 do $              
declare 
   counter integer := 0;
begin
   while counter < 50 loop
      --SAVE THIS INTO DATA      
     update data set a1 = a1 - 0.1*random(), a2 = a2 - 0.1*random() where id =1;  
    --SAVE THIS INTO DATA (END)
      counter := counter   1;
   end loop;
end$;

select * from data;
 id |         a1          |         a2         
---- --------------------- --------------------
  1 | -1.3146675853588001 | -1.216530003992667

 

Комментарии:

1. Спасибо, я все еще немного новичок в SQL, так что это идеальное решение. Спасибо вам за быстрый ответ.