lunedì 21 marzo 2022

Allineamento fra valore Sequence e campo ID della tabella

Scenario :
  • Campo identity autoinc gestito con Trigger e Sequence 
  • Database Oracle versione inferiore alla 12 (perchè dalla 12 è gestito autonomamente come SqlServer)

Nei casi in cui in campo ID ( identificativo univoco ) venga inserito direttamente senza prelevare il campo dalla sequence o per qualche altro motivo ( nel mio caso ripristino delle tabelle e non delle sequence ), è necessario riportare il valore della sequence al massimo valore del campo autoinc +1.

La procedura sotto elencata fa questo lavoro.

DECLARE
  last_used  NUMBER;
  curr_seq   NUMBER;
BEGIN
  SELECT MAX(<CampoAutoInc>) INTO last_used FROM <Tabella>;
  LOOP
    SELECT <Sequence>.NEXTVAL INTO curr_seq FROM dual;
    IF curr_seq >= last_used THEN EXIT;
    END IF;
  END LOOP;
END;

Esempio

DECLARE
  last_used  NUMBER;
  curr_seq   NUMBER;
BEGIN
  SELECT MAX(IDN) INTO last_used FROM TESTAXML ;
  LOOP
    SELECT TESTAXML_SEQ.NEXTVAL INTO curr_seq FROM dual;
    IF curr_seq >= last_used THEN EXIT;
    END IF;
  END LOOP;
END;

Nessun commento:

Posta un commento