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

Oracle Discussion :

[Oracle 10g] Auto Increment


Sujet :

Oracle

  1. #1
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Avril 2006
    Messages
    284
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2006
    Messages : 284
    Points : 90
    Points
    90
    Par défaut [Oracle 10g] Auto Increment
    Bonjour,

    J'ai lu qu'on ne pouvais faire d'auto increment avec Oracle :s
    Je voudrais savoir comment je pourrais faire pour le faire autrement???
    J'ai une table CRA avec comme champs ID que je souhaite auto increment.
    J'ai lu dans une discussion une technique mais je n'ai pas trop compris comment faire...

    Merci de votre aide

  2. #2
    Membre éclairé
    Avatar de karami
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    343
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations forums :
    Inscription : Juin 2005
    Messages : 343
    Points : 668
    Points
    668
    Par défaut
    Tu fait comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    create sequence test_seq 
    start with 1 
    increment by 1 
    nomaxvalue;
    Et pour inserer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    insert into my_test values(test_seq.nextval, 'voila!');

  3. #3
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Avril 2006
    Messages
    284
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2006
    Messages : 284
    Points : 90
    Points
    90
    Par défaut
    Merci,

    Mais je ne compreds pas exactement commetn je dois faire.
    Je creer la sequance, ok.
    Puis c'est dans mon sqldatasource(car je developpe avec VS2005), en plus de mon insertion de mes elements de ma table CRA, que je dois encore rajouter un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    insert into my_test values(test_seq.nextval, 'voila!');
    ???

    Merci encore

  4. #4
    Membre éclairé
    Avatar de karami
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    343
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations forums :
    Inscription : Juin 2005
    Messages : 343
    Points : 668
    Points
    668
    Par défaut
    Citation Envoyé par cnguyen
    Merci,

    Mais je ne compreds pas exactement commetn je dois faire.
    Je creer la sequance, ok.
    Puis c'est dans mon sqldatasource(car je developpe avec VS2005), en plus de mon insertion de mes elements de ma table CRA, que je dois encore rajouter un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    insert into my_test values(test_seq.nextval, 'voila!');
    ???

    Merci encore
    Tu insere à la place de ton champs autoincrement "nom_sequence.nextval",suivi des autres champs de ta table.

  5. #5
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 075
    Points
    19 075
    Par défaut
    avec un trigger on peut aussi ignorer le champ lors de l'insert. L'outil de recherche du forum devrait apporter une aide plus compléte

  6. #6
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Avril 2006
    Messages
    284
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2006
    Messages : 284
    Points : 90
    Points
    90
    Par défaut
    J'ai fais dans la fonction recherche : auto increment trigger sequence
    Mais sans reel resultat
    Je n'ai pas donc pas trouvé our le trigger :s

  7. #7
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 075
    Points
    19 075

  8. #8
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Avril 2006
    Messages
    284
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2006
    Messages : 284
    Points : 90
    Points
    90
    Par défaut
    J'ai rien compris pour le trigger :s
    J'ai jamais utilisé ca c'est surement pour sa

  9. #9
    Membre éclairé
    Avatar de karami
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    343
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations forums :
    Inscription : Juin 2005
    Messages : 343
    Points : 668
    Points
    668
    Par défaut
    Citation Envoyé par cnguyen
    J'ai rien compris pour le trigger :s
    J'ai jamais utilisé ca c'est surement pour sa
    Voici comment proceder si tu veux utiliser les trigers:

    Création de la table :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    CREATE TABLE test
    (id NUMBER PRIMARY KEY,
    name VARCHAR2(30));
    Création de la sequence :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    CREATE SEQUENCE test_sequence
    START WITH 1
    INCREMENT BY 1;
    Création du triger :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    CREATE OR REPLACE TRIGGER test_trigger
    BEFORE INSERT
    ON test
    REFERENCING NEW AS NEW
    FOR EACH ROW
    BEGIN
    SELECT test_sequence.nextval INTO :NEW.ID FROM dual;
    END;
    /
    Et pour inserer l'enregistrement tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO test (name) VALUES ('Jon');

  10. #10
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Avril 2006
    Messages
    284
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2006
    Messages : 284
    Points : 90
    Points
    90
    Par défaut
    Bonjour,

    Et merci encore pour votre aide.
    Je voudrais savoir, a quoi correspond le "dual" dans le select

  11. #11
    Membre éclairé
    Avatar de karami
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    343
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations forums :
    Inscription : Juin 2005
    Messages : 343
    Points : 668
    Points
    668
    Par défaut
    dual est une table d'Oracle qui est vide et qui ne sert qu'à appeler des fonctions simplement.
    consulter ce lien pour plus d'info developpez.com

  12. #12
    Membre expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Points : 3 609
    Points
    3 609
    Par défaut
    Citation Envoyé par karami
    dual est une table d'Oracle qui est vide
    Si on veut être puriste, elle n'est pas vide, elle ne contient qu'une ligne et qu'une colonne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SQL> desc dual
     Name                            Null?    Type
     ------------------------------- -------- ----
     DUMMY                                    VARCHAR2(1)
     
    SQL> select * from dual;
    D
    -
    X

  13. #13
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 075
    Points
    19 075
    Par défaut
    d'ailleurs il ne faut ni la vider ni ajouter une ligne

  14. #14
    Rédacteur

    Homme Profil pro
    Consultant / formateur Oracle et SQL Server
    Inscrit en
    Décembre 2002
    Messages
    3 460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant / formateur Oracle et SQL Server

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 460
    Points : 8 077
    Points
    8 077
    Par défaut
    Citation Envoyé par plaineR
    Si on veut être puriste, elle n'est pas vide, elle ne contient qu'une ligne et qu'une colonne
    Ce n'est pas être puriste que de le dire, puisque c'est impératif pour son fonctionnement qu'elle contienne une et une seule ligne.
    Si elle était vide, elle ne servirait à rien.

    Je me suis rendu compte que certaines personnes (y compris des DBA confirmés) ne sont pas conscients que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT sysdate from DUAL;
    signifie tout bonnement "pour chaque ligne de la table DUAL, ramène-moi le résultat de la fonction sysdate".

    (Sans vouloir troubler les esprits, il est aussi intéressant de lire sur le site de Tom Kyte des exemples du caractère "magique" de DUAL.)

  15. #15
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Avril 2006
    Messages
    284
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2006
    Messages : 284
    Points : 90
    Points
    90
    Par défaut
    D'accord, je vous remercie tous

    Je me demandais si je devais changer cette ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT test_sequence.nextval INTO :NEW.ID FROM dual;
    Enfin le dual eh eh eh

  16. #16
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Avril 2006
    Messages
    284
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2006
    Messages : 284
    Points : 90
    Points
    90
    Par défaut
    Voila ce que j'ai fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CREATE TABLE cra
    (id NUMBER PRIMARY KEY,
    userid VARCHAR2(30),
    projet VARCHAR2(30),
    activite VARCHAR2(30));
    Pour la sequence :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    CREATE SEQUENCE seq_inc
    START WITH 1
    INCREMENT BY 1;

    Pour le trigger :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    CREATE OR REPLACE TRIGGER test_trigger
    BEFORE INSERT
    ON test
    REFERENCING NEW AS NEW
    FOR EACH ROW
    BEGIN
    SELECT seq_inc.nextval INTO :NEW.ID FROM dual;
    END;
    Et lorsque je veux afficher une table avec mes colonnes en faisant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT "ID", "USERID", "PROJET", "ACTIVITE";
    Il me mets :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.Data.OracleClient.OracleException: ORA-01722: Nombre non valide

Discussions similaires

  1. Auto increment sur Oracle
    Par intissar_g dans le forum SQL
    Réponses: 3
    Dernier message: 30/09/2008, 15h06
  2. Oracle 10g - Définir une colonne auto-incrémentée
    Par david71 dans le forum Oracle
    Réponses: 2
    Dernier message: 14/01/2008, 16h40
  3. [EJB2.1 Entity] [Oracle] auto-increment
    Par jamal_b dans le forum Java EE
    Réponses: 10
    Dernier message: 25/08/2006, 13h57
  4. [oracle 9i] auto-increment
    Par jamal_b dans le forum Oracle
    Réponses: 15
    Dernier message: 10/04/2006, 17h19
  5. auto incremente + ORACLE?? (intégré à la FAQ)
    Par oceane751 dans le forum Oracle
    Réponses: 4
    Dernier message: 20/01/2006, 17h18

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