IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SQL Oracle Discussion :

Auto Increment


Sujet :

SQL Oracle

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Congo-Kinshasa

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Auto Increment
    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

  2. #2
    Membre expérimenté Avatar de Cincinnatus
    Homme Profil pro
    Développeur d'applications métier
    Inscrit en
    Mars 2007
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur d'applications métier
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2007
    Messages : 592
    Points : 1 679
    Points
    1 679
    Par défaut
    Citation Envoyé par Cubaka Destin Voir le message
    Bonjour j'ai un souci avec le champs Auto Increment avec Oracle!:::
    Normal, il y a pas de Auto Increment en Oracle .
    L'erreur remontée indique un problème de compilation de trigger. ça semble une meilleure piste.

  3. #3
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    C'est arrivé en 12c.

  4. #4
    Membre expérimenté Avatar de Cincinnatus
    Homme Profil pro
    Développeur d'applications métier
    Inscrit en
    Mars 2007
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur d'applications métier
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2007
    Messages : 592
    Points : 1 679
    Points
    1 679
    Par défaut
    Citation Envoyé par Waldar Voir le message
    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 ?

  5. #5
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 136
    Points : 38 561
    Points
    38 561
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par Cincinnatus Voir le message
    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 ?
    C'est une particularité d'Oracle d'avoir implémenté l'auto-incrément comme une "surcouche" d'une séquence.
    On peut redémarrer à n'importe quelle valeur à tout moment, sous réserve que les contraintes liées à la colonne soient respectées bien sur

  6. #6
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Citation Envoyé par Cincinnatus Voir le message
    Mais je ne pense pas que je l'utiliserais.
    Tiré du lien que vous avez indiqué :
    it is not difficult to deduce that a sequence is being used to populate the identity column.
    Donc au final, ça reste une séquence, qui permet à Oracle DB de respecter la norme SQL quant aux colonnes auto incrémentées.

  7. #7
    Membre expérimenté Avatar de Cincinnatus
    Homme Profil pro
    Développeur d'applications métier
    Inscrit en
    Mars 2007
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur d'applications métier
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2007
    Messages : 592
    Points : 1 679
    Points
    1 679
    Par défaut Valeur par défaut définie par une séquence
    Citation Envoyé par Waldar Voir le message
    Donc au final, ça reste une séquence, qui permet à Oracle DB de respecter la norme SQL quant aux colonnes auto incrémentées.
    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 :

    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) 
    );
    J'attends la 5ème option...

Discussions similaires

  1. auto-increment
    Par fafet dans le forum Requêtes
    Réponses: 2
    Dernier message: 11/07/2003, 15h05
  2. [MYSQL] valeur auto-increment
    Par alex1er dans le forum Requêtes
    Réponses: 5
    Dernier message: 10/07/2003, 12h26
  3. Auto Increment
    Par Guizz dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 23/06/2003, 18h36
  4. Nom du champs auto-incrementé
    Par norroy dans le forum Requêtes
    Réponses: 2
    Dernier message: 17/06/2003, 18h30
  5. Pb d'auto-incrément sur une table v7
    Par Nivux dans le forum Paradox
    Réponses: 9
    Dernier message: 26/12/2002, 12h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo