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 :

Requête auto-incrémentation qui ne fonctionne pas


Sujet :

SQL Oracle

  1. #1
    Membre habitué
    Inscrit en
    Avril 2008
    Messages
    206
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 206
    Points : 194
    Points
    194
    Par défaut Requête auto-incrémentation qui ne fonctionne pas
    Bonjour,

    Voici ma requête afin de permettre l'auto-incrémentation d'un de mes champs :

    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
     
    CREATE SEQUENCE MaSequence
      START WITH 1
      MAXVALUE 999999999999999999999999
      MINVALUE 1
      NOCYCLE
      NOCACHE
      NOORDER;
     
    CREATE TRIGGER MonTrigger
       BEFORE INSERT
       ON MATABLE
       FOR EACH ROW
    BEGIN
       SELECT MaSequence.NEXTVAL
         INTO :NEW.MONCHAMPPKY
         FROM DUAL;
    END;
    Je l'ai récupéré sur un autre thread mais elle ne fonctionne pas ==> Instruction SQL non valide.

    Merci de votre aide

  2. #2
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Ce sont 2 instructions séparées bien sur..
    Donc en premier tu crées ta séquence
    Si c'est ok, tu crées ton trigger.
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  3. #3
    Membre habitué
    Inscrit en
    Avril 2008
    Messages
    206
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 206
    Points : 194
    Points
    194
    Par défaut
    Oui bien sûr.

    J'ai exécuté séparément, ma séquence est créée mais il y a erreur sur mon Trigger.

  4. #4
    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
    Bien entendu, vous avez bien une table qui s'appelle MATABLE et qui possède une colonne MONCHAMPPKY ?

  5. #5
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Que donne un show_errors ?
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  6. #6
    Membre habitué
    Inscrit en
    Avril 2008
    Messages
    206
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 206
    Points : 194
    Points
    194
    Par défaut
    Citation Envoyé par Waldar Voir le message
    Bien entendu, vous avez bien une table qui s'appelle MATABLE et qui possède une colonne MONCHAMPPKY ?
    Evidemment


    Citation Envoyé par McM Voir le message
    Que donne un show_errors ?

    J'ai exactement cette erreur lors de l'exécution de ma requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Symbole "end-of-file" rencontré à la place d'un des symboles suivants : ;
    Et après il me met que c'est une requête SQL non valide.

  7. #7
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Poste ton code exact
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  8. #8
    Membre habitué
    Inscrit en
    Avril 2008
    Messages
    206
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 206
    Points : 194
    Points
    194
    Par défaut
    Citation Envoyé par McM Voir le message
    Poste ton code exact
    Il a été posté dans mon tout premier post.

  9. #9
    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
    Essayez de rajouter un / après le end :

  10. #10
    Membre habitué
    Inscrit en
    Avril 2008
    Messages
    206
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 206
    Points : 194
    Points
    194
    Par défaut
    Citation Envoyé par Waldar Voir le message
    Essayez de rajouter un / après le end :
    Oui j'avais essayé en premier lieu, et l'erreur était la même.
    edit : je viens de réessayer, toujours pareil.

  11. #11
    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 forcément un problème d'existence de la table ou de la colonne car ça fonctionne :
    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
    CREATE TABLE MaTable
    (
        MONCHAMPPKY    integer
    );
    -- Table created.
     
    CREATE SEQUENCE MaSequence
      START WITH 1
      MAXVALUE 999999999999999999999999
      MINVALUE 1
      NOCYCLE
      NOCACHE
      NOORDER;
    -- Sequence created.
     
    CREATE TRIGGER MonTrigger
       BEFORE INSERT
       ON MATABLE
       FOR EACH ROW
    BEGIN
       SELECT MaSequence.NEXTVAL
         INTO :NEW.MONCHAMPPKY
         FROM DUAL;
    END;
    /
    -- Trigger created.

  12. #12
    Membre habitué
    Inscrit en
    Avril 2008
    Messages
    206
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 206
    Points : 194
    Points
    194
    Par défaut
    Citation Envoyé par Waldar Voir le message
    C'est forcément un problème d'existence de la table ou de la colonne car ça fonctionne :
    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
    CREATE TABLE MaTable
    (
        MONCHAMPPKY    integer
    );
    -- Table created.
     
    CREATE SEQUENCE MaSequence
      START WITH 1
      MAXVALUE 999999999999999999999999
      MINVALUE 1
      NOCYCLE
      NOCACHE
      NOORDER;
    -- Sequence created.
     
    CREATE TRIGGER MonTrigger
       BEFORE INSERT
       ON MATABLE
       FOR EACH ROW
    BEGIN
       SELECT MaSequence.NEXTVAL
         INTO :NEW.MONCHAMPPKY
         FROM DUAL;
    END;
    /
    -- Trigger created.

    Je viens de vérifier à peu près 40 fois... et ma table et mon champs existent bien ! J'ai du mal à comprendre...

    Je viens de tester ton code chez moi, et il ne fonctionne pas ! (toujours la même erreur)

  13. #13
    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
    Ça peut être une erreur au niveau de USER : votre table existe dans USER2 et vous vous connectez avec USER1
    Ou au niveau de la syntaxe de la table et/ou colonne, vous l'avez créé avec des double quote ce qui la rend sensible à la casse.

  14. #14
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Mais normalement c'est une erreur plus explicite que
    Symbole "end-of-file" rencontré à la place d'un des symboles suivants : ;
    Mais bon admettons que n'importe quelle erreur ait pu se produire : Le trigger existe peut être déjà, parce que le code est un create pas un CREATE OR REPLACE.
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  15. #15
    Membre habitué
    Inscrit en
    Avril 2008
    Messages
    206
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 206
    Points : 194
    Points
    194
    Par défaut
    J'ai copié exactement le même code que Waldar, y compris pour le CREATE TABLE pour tester... Donc il n'y a pas de problème de casse ou user.


    Sinon j'ai pris soin de supprimer toutes les séquences qui avaient déjà été créées, pareil pour les triggers (de toute façon si j'en créé un autre avec le même nom, j'ai une erreur comme quoi un trigger ou une séquence du même nom existe déjà).

  16. #16
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Essaye de créer un trigger vide (avec juste NULL; dans le corps).
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  17. #17
    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
    Vous travaillez bien sur Oracle ?
    Plus sérieusement, de quelle version s'agit-il ?

  18. #18
    Membre habitué
    Inscrit en
    Avril 2008
    Messages
    206
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 206
    Points : 194
    Points
    194
    Par défaut
    Hum, toujours la même erreur McM... J'ai du mal à saisir là !

    edit : Oui, Oracle 9.2
    Mais j'utilise l'interface d'un ERP pour réaliser les requêtes (ce qui ne doit pas être un soucis puisque cette interface fonctionne, a été testée etc)

  19. #19
    Membre habitué
    Inscrit en
    Avril 2008
    Messages
    206
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 206
    Points : 194
    Points
    194
    Par défaut
    Je reviens avec un détail qui va peut être vous permettre de m'aider

    En début d'erreur j'ai ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    4/14      PLS-00103 : Symbole... etc
    lorsque j'exécute :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    CREATE TRIGGER MonTrigger
       BEFORE INSERT
       ON MATABLE
       FOR EACH ROW
    BEGIN
       SELECT MaSequence.NEXTVAL
         INTO :NEW.MONCHAMPPKY
         FROM DUAL;
    END;
    Merci

  20. #20
    Rédacteur

    Homme Profil pro
    Développeur et DBA Oracle
    Inscrit en
    Octobre 2006
    Messages
    878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur et DBA Oracle

    Informations forums :
    Inscription : Octobre 2006
    Messages : 878
    Points : 1 197
    Points
    1 197
    Par défaut
    Salut,

    Avec sqlplus ça fonctionne trés bien.

    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    SQL> DROP TABLE ma_table;
    --Table supprimée.
     
    SQL> CREATE TABLE ma_table
      2  ( monchamppky NUMBER, nom VARCHAR2(50));
    --Table créée.
     
    SQL> 
    SQL> DROP SEQUENCE masequence;
    --Séquence supprimée.
     
    SQL> 
    SQL> CREATE SEQUENCE masequence
      2    START WITH 1
      3    MAXVALUE 999999999999999999999999
      4    MINVALUE 1
      5    NOCYCLE
      6    NOCACHE
      7    NOORDER;
    --Séquence créée.
     
    SQL> 
    SQL> DROP  TRIGGER montrigger;
    --DROP  TRIGGER montrigger
    --*
    --ERREUR à la ligne 1 :
    --ORA-04080: déclencheur 'MONTRIGGER' n'existe pas
     
     
    SQL> CREATE TRIGGER montrigger
      2     BEFORE INSERT
      3     ON ma_table
      4     FOR EACH ROW
      5  BEGIN
      6     SELECT masequence.NEXTVAL
      7       INTO :NEW.monchamppky
      8       FROM DUAL;
      9  END;
     10  /
    --Déclencheur créé.
     
    SQL> insert into ma_table ( nom)values('Salim');
    --1 ligne créée.
     
    SQL> commit;
    --Validation effectuée.
     
    SQL> select* from ma_table;
     
    MONCHAMPPKY NOM
    ----------- ------------------
              1 Salim
     
    SQL>

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. une requête de suppression qui ne fonctionne pas (trop longue)
    Par clavier12AZQSWX dans le forum Requêtes
    Réponses: 9
    Dernier message: 25/07/2011, 16h03
  2. requête de selection qui ne fonctionne pas
    Par emmablue dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 28/07/2006, 13h55
  3. requête match qui ne fonctionne pas.
    Par sam01 dans le forum Requêtes
    Réponses: 3
    Dernier message: 29/05/2006, 20h28
  4. [MySQL] Requête update qui ne fonctionne pas
    Par Sylvain245 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 05/12/2005, 16h40
  5. [SQL] Requête à jointure qui ne fonctionne pas
    Par Bensor dans le forum Langage SQL
    Réponses: 2
    Dernier message: 09/12/2004, 16h10

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