последовательность приращений в хранимой процедуре PostgreSQL - PullRequest
0 голосов
/ 26 марта 2019

Как автоматически увеличивать порядковый номер один раз для каждого запуска хранимой процедуры и как использовать его в условии where оператора update?

Я уже присвоил порядковый номер следующему значению в каждом прогоне, но я не могу использовать его в условии where.

CREATE OR REPLACE FUNCTION ops.mon_connect_easy()
   RETURNS void
   LANGUAGE plpgsql
AS $function$

declare
   _inserted_rows bigint = 0;
   sql_run bigint = 0;

   --assigning the sequence number to the variable 
   select nextval('ops.mon_connecteasy_seq') into run_seq_num; 


   -- use for selection iteration_id. this is hwere I'm getting stuck 

   update t_contract c
   set end_date = ce.correct_end_date, status='Active',
       orig_end_date =ce.correct_end_date
   from ops.t_mon_ConnectEasy ce
   where c.contract_id = ce.contract_id
     and run_seq_num = ??;

1 Ответ

1 голос
/ 26 марта 2019

nextval() автоматически продвигает последовательность перед возвратом полученного значения. Вам не нужно ничего лишнего. Просто используйте функцию в вашем запросе напрямую:

update t_contract c
set    end_date = ce.correct_end_date
     , status = 'Active'
     , orig_end_date = ce.correct_end_date
from   ops.t_mon_ConnectEasy ce
where  c.contract_id = ce.contract_id
and    iteration_id = nextval('ops.mon_connecteasy_seq');

Имейте в виду, что одновременные транзакции также могут продвигать последовательность, создавая виртуальные пропуски в последовательных номерах.

И у меня есть ноющее подозрение, что это может быть не лучшим способом для достижения ваших нераскрытых целей.

...