Bonjour j'ai un souci avec le champs Auto Increment avec Oracle!:::
Voici le message d'erreur après exécution ou insertion:!
Error code 4098, SQL state 42000: ORA-04098: trigger 'HOPITAL.TEST_TRIGGER' is invalid and failed re-validation
Bonjour j'ai un souci avec le champs Auto Increment avec Oracle!:::
Voici le message d'erreur après exécution ou insertion:!
Error code 4098, SQL state 42000: ORA-04098: trigger 'HOPITAL.TEST_TRIGGER' is invalid and failed re-validation
C'est arrivé en 12c.
Mais je ne pense pas que je l'utiliserais.
D'après le test réalisé ici (https://oracle-base.com/articles/12c...n-oracle-12cr1), parmi les 3 possibilités pour alimenter une colonne "d'identité" sont désormais, à partir d'oracle 12c :
- l'usage de NEXTVAL dans l'insert,
- le trigger BEFORE INSERT?
- l'"auto-increment".
Les performances relevées sont équivalentes pour l'approche SEQUENCE.NEXTVAL et AUTO-INCREMENT.
Je continuerai avec les triggers pour ne pas avoir à gérer la clé primaire en cas d'insertion peu volumineuse et l'appel à NEXTVAL en cas de PL/SQL.
L'auto-increment me semble un "sucre syntaxique", d'ailleurs en surcouche à une séquence, et moins contrôlable. Par exemple, pour des tests d'application, des collègues ont besoin de remettre des séquences à 1 sans devoir recompiler le PL/SQL dépendant. C'est possible en Auto-increment ?
Oui, mais, même si c'est un point de détail, c'est dommage qu'on ne puisse pas nommer les séquences que l'on veut employer pour alimenter ces colonnes auto-incrémentées. Il est possible de nommer les contraintes lors de la création des tables, il serait intéressant de pouvoir faire de même avec ces séquences "dissimulées".
Je viens par ailleurs de trouver une 4ème façon d'alimenter une clé primaire, toujours avec une séquence
cf https://oracle-base.com/articles/12c...2cr1#sequences
Valeur par défaut définie par une séquence :
J'attends la 5ème option...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 CREATE TABLE t1 ( id NUMBER DEFAULT t1_seq.NEXTVAL, description VARCHAR2(30) );![]()
Partager