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 :

pb trigger lors insertion enregistrment! [Débutant(e)]


Sujet :

Oracle

  1. #1
    Membre à l'essai
    Inscrit en
    Mai 2005
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 16
    Points : 10
    Points
    10
    Par défaut pb trigger lors insertion enregistrment!
    Bonsoir,

    Pour commencer j'aurais une information a confirmer:
    J'ai vu qu'il n'y avait pas d'auto-increment proprement dit sous oracle dans les versions anterieures a la 9, mais est-ce que c'est valable pour la version 10g?

    Sinon: j'ai cree une sequence et un trigger qui simulent l'auto-increment, je voudrais savoir quelle est la syntaxe lors de l'insertion d'une ligne dans ma table?

    En gros quand j'ai des valeurs a inserer qu'est ce qu'il faut mettre dans le champ en auto-increment?

    J'ai essaye differentes choses mais j'ai toujours une erreur!

    Merci d'avance de votre reponse

  2. #2
    Membre expert
    Avatar de LeoAnderson
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 938
    Points : 3 199
    Points
    3 199
    Par défaut Re: pb trigger lors insertion enregistrment!
    Citation Envoyé par tooneygirl
    Bonsoir,

    Pour commencer j'aurais une information a confirmer:
    J'ai vu qu'il n'y avait pas d'auto-increment proprement dit sous oracle dans les versions anterieures a la 9, mais est-ce que c'est valable pour la version 10g?
    Avez-vous vu dans la release note de la 10g ou dans les datatypes de la 10g une telle information ? ;-)

    Citation Envoyé par tooneygirl
    Sinon: j'ai cree une sequence et un trigger qui simulent l'auto-increment, je voudrais savoir quelle est la syntaxe lors de l'insertion d'une ligne dans ma table?
    Aucune syntaxe particulière... enfin, ça dépend du trigger...

    Citation Envoyé par tooneygirl
    En gros quand j'ai des valeurs a inserer qu'est ce qu'il faut mettre dans le champ en auto-increment?

    J'ai essaye differentes choses mais j'ai toujours une erreur!
    ça irait mieux si vous donniez le code ainsi que l'erreur obtenue !

  3. #3
    Membre à l'essai
    Inscrit en
    Mai 2005
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 16
    Points : 10
    Points
    10
    Par défaut
    Un essai parmi d'autres:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SQL> insert into PHONE values('06 00 00 00 00');
    insert into PHONE values('06 00 00 00 00')
                *
    ERREUR à la ligne 1 :
    ORA-00947: not enough values
    je voudrais savoir quelle valeur mettre pour le champ idPhone?

    Effectivement je n'ai pas regarde dans la release! j'y jette un oeuil! Mais j'aimerais quand meme avoir la reponse pour mon information personnelle si c'est possible!

    Merci

  4. #4
    Membre expert
    Avatar de LeoAnderson
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 938
    Points : 3 199
    Points
    3 199
    Par défaut
    Citation Envoyé par tooneygirl
    Un essai parmi d'autres:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SQL> insert into PHONE values('06 00 00 00 00');
    insert into PHONE values('06 00 00 00 00')
                *
    ERREUR à la ligne 1 :
    ORA-00947: not enough values
    je voudrais savoir quelle valeur mettre pour le champ idPhone?
    Comment voulez-vous qu'on vous réponde ???
    On ne connait pas la structure de la table, ni les triggers mis en place...

    Citation Envoyé par tooneygirl
    Effectivement je n'ai pas regarde dans la release! j'y jette un oeuil! Mais j'aimerais quand meme avoir la reponse pour mon information personnelle si c'est possible!
    Merci
    C'est en consultant la doc. que vous obtiendrez la "réponse pour votre information personnelle" ! ;-)
    Le forum ne doit être que l'ultime chance, quand vous n'avez rien trouvé par ailleurs (Doc. officielle, Archives du Forum, FAQ, tutoriels, articles, google, ...)

    [edit] Je suis trop bon...
    Citation Envoyé par http://ora-00947.ora-code.com
    ORA-00947: not enough values
    Cause: This error occurs when a SQL statement requires two sets of values equal in number, but the second set contains fewer items than the first set. This can occur in a WHERE or HAVING clause in which a nested SELECT returns too few columns as in:


    WHERE (A,B) IN (SELECT C FROM ...)

    Another common cause of this error is an INSERT statement in which the VALUES or SELECT clause does not contain enough values needed for the INSERT, as in

    INSERT INTO EMP(EMPNO,ENAME) VALUES('JONES')
    Action: Check the number of items in each set and change the SQL statement to make them equal.
    [/edit]

  5. #5
    Membre à l'essai
    Inscrit en
    Mai 2005
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 16
    Points : 10
    Points
    10
    Par défaut
    Bonsoir,
    J'ai consulte la release d'oracle 10g et a priori (sauf si j'ai rate le pragraphe ) Il n'y a toujours pas de mot cle qui permette l'auto-increment!

    L'information a titre personnel c'etait si cela existait malgre tout : Alors comment "declancher" le trigger qui simule l'auto-increment!

    La question est donc toujours d'actualite puisqu'a priori ca n'existe pas (je n'ai peut etre pas ete claire je vais donc essayer de l'etre plus)

    Et ce n'est pas faute d'avoir cherche (Google, faq et forum) avant de poser ma question!

    Mon phone a un champ IDPHONE (sur lequel il y a une sequence et un trigger pour simuler l'auto-increment)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    --creation de la sequence
    create sequence PHONE_SEQ start with 1 increment by 1 nomaxvalue;
     
    --creation du trigger
    create trigger PHONE_TRIGGER
    before insert on PHONE for each row
    begin
    select PHONE_SEQ.nextval into :new.IDPHONE from dual;
    end;
    /
    et un champ numero de tel!

    Lors de l'insertion d'une nouvelle ligne, je sais bien qu'Oracle demande le meme nombre de valeurs que de colonnes
    Mais justement le but de mon insert c'est de ne pas avoir a entrer de valeur dans l'id mais qu'il fasse par lui-meme l'auto-increment alors
    ma question est dans:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO PHONE VALUES( #, '06 00 00 00 00');
    Qu'est ce que je mets a la place du #?!

    J'espere que c'est assez clair comme ca?!

  6. #6
    Membre expert
    Avatar de LeoAnderson
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 938
    Points : 3 199
    Points
    3 199
    Par défaut
    Datatypes : http://download-uk.oracle.com/docs/c...001.htm#i54330

    Cette page fournie la liste de tous les types que Oracle gère en natif en 10g. si vous ne voyez rien qui parle d'auto-incrément, c'est que ça n'existe pas.

    Un trigger (ou déclencheur) se déclenche automatiquement en focntion de son type, votre question n'a pas de sens.
    Un trigger BEFORE INSERT se déclenchera automatiquement AVANT une INSERTion....




    Insert : http://download-uk.oracle.com/docs/c...htm#SQLRF01604
    Même s'il est possible de ne pas le faire, il faut toujours préciser les colonnes dans des SELECT ou INSERT.... ça évite bien des désagréments ! ;-)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT COL1, COL2, COL4, COL3 FROM MATABLE;
    INSERT INTO MATABLE (COL4,COL2) VALUES ('toto', 2);

  7. #7
    Membre actif Avatar de Cereal123
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Juin 2004
    Messages
    414
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Juin 2004
    Messages : 414
    Points : 214
    Points
    214
    Par défaut
    Le trigger me semble bon.
    En revanche, puisque votre table PHONE possède 2 colonnes (disons id_phone et phone_number) et que vous ne précisez qu'une seule de ces colonnes dans l'insert, il faut écrire :

    insert into PHONE (Phone_number) values('06 00 00 00 00');

    C.

  8. #8
    Membre à l'essai
    Inscrit en
    Mai 2005
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 16
    Points : 10
    Points
    10
    Par défaut
    Bonsoir,

    Merci de vos reponses. J'ai effectivement pris de "mauvaises" habitudes avec la commande INSERT et en precisant la colonne ca me permet effectivement de m'affranchir du nombre de colonnes (je n'y pensais plus) Mais j'ai aussi trouve autre chose en me creusant la tete pour info: en mettant DEFAULT a la place de la valeur id ca marche!!

    Merci beaucoup!

  9. #9
    Membre expert
    Avatar de LeoAnderson
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 938
    Points : 3 199
    Points
    3 199
    Par défaut
    La clause DEFAULT risque de faire que la séquence ne sera plus utilisée !!!!

    LA solution est donc simplement de préciser les colonnes.

  10. #10
    Membre à l'essai
    Inscrit en
    Mai 2005
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 16
    Points : 10
    Points
    10
    Par défaut
    Je prends note MERCI! Je me coucherai moins idiote ce soir!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Insert avec select sur table avec Trigger d'insertion
    Par bran_noz dans le forum Développement
    Réponses: 5
    Dernier message: 23/12/2005, 14h38
  2. [trigger] update inserted?
    Par cosminutza dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 01/06/2005, 09h37
  3. Trigger et insert
    Par jf-nigou dans le forum Oracle
    Réponses: 5
    Dernier message: 16/02/2005, 16h45
  4. Trigger sur l'enregistrement courant
    Par fifi2000ez dans le forum SQL
    Réponses: 4
    Dernier message: 03/08/2004, 21h25
  5. Insertion enregistrement dans table
    Par naidinp dans le forum ASP
    Réponses: 13
    Dernier message: 11/09/2003, 09h56

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