Bonjour tout le monde,
J'ai un script qui est généré par SQL Developer lors d'une migration de Database.
Ce script me permet de créer la structure de la base sous Oracle.
Et il y a plusieurs triggers qui attirent mon attention car j'ai du mal à comprendre ce qu'ils font.
Voilà un exemple :
A la première visualisation, j'ai pensé que c'était la gestion de l'auto-incrément mais vue les nombres que je vois dans ma base maintenant que j'ai importer les données, je ne sais plus ...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 CREATE SEQUENCE T1_FAMILLE_ID_FAMILLE_SEQ MINVALUE 1 MAXVALUE 999999999999999999999999 INCREMENT BY 1 NOCYCLE ; CREATE OR REPLACE TRIGGER T1_FAMILLE_ID_FAMILLE_TRG BEFORE INSERT OR UPDATE ON T1_FAMILLE FOR EACH ROW DECLARE v_newVal NUMBER(12) := 0; v_incval NUMBER(12) := 0; BEGIN IF INSERTING AND :new.ID_FAMILLE IS NULL THEN SELECT T1_FAMILLE_ID_FAMILLE_SEQ.NEXTVAL INTO v_newVal FROM DUAL; -- If this is the first time this table have been inserted into (sequence == 1) IF v_newVal = 1 THEN --get the max indentity value from the table SELECT max(ID_FAMILLE) INTO v_newVal FROM T1_FAMILLE; v_newVal := v_newVal + 1; --set the sequence to that value LOOP EXIT WHEN v_incval>=v_newVal; SELECT T1_FAMILLE_ID_FAMILLE_SEQ.nextval INTO v_incval FROM dual; END LOOP; END IF; -- save this to emulate @@identity sqlserver_utilities.identity := v_newVal; -- assign the value from the sequence to emulate the identity column :new.ID_FAMILLE := v_newVal; END IF; END; /
Si ça serait de l'auto-incrément, les valeurs commenceraient à 1 or là, cela commence parfois par des valeurs de plus de 2 000 000.
Pouvez-vous m'éclaircir un peu sur ce sujet ?
Je vous remercie par avance pour vos suggestions.
Partager