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;
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
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;
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