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 :

Insertion dans deux tables


Sujet :

SQL Oracle

  1. #1
    Membre averti
    Inscrit en
    Décembre 2007
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 15
    Par défaut Insertion dans deux tables
    bon voila je veux faire une procédure qui fait l'insertion dans deux tables j'ai le script sql maintenant je veux le faire avec oracle bon voila mon script :
    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
    create table equipe(
    id_equipe int primary key identity(1,1),
    nom varchar(20) not null,
    nbre_pts int default 0,
    nbre_marque int default 0,
    nbre_encaisse int default 0
    )
     
    create table match(
    id_equipe1 int,
    id_equipe2 int,
    dat datetime ,
    score_rec int, 
    score_inv int,
    constraint fk_e foreign key (id_equipe1) references equipe(id_equipe),
    constraint fk_n foreign key (id_equipe2) references equipe(id_equipe),
    constraint fc_e primary key (id_equipe1,id_equipe2)
    )
     
    --la procédure en sql/server 
    create proc ajoute_match
    (@a int,@b int,@c  datetime,@d int,@f int)
    as
    begin
    insert into match values (@a,@b,@c,@d,@f)
    update equipe
    set nbre_marque=nbre_marque+@d, nbre_encaisse=nbre_encaisse+@f
    where id_equipe=@a
    update equipe
    set nbre_marque=nbre_marque+@f, nbre_encaisse=nbre_encaisse+@d
    where id_equipe=@b
    if(@d>@f)
    update equipe 
    set nbre_pts= nbre_pts+3
    where id_equipe=@a
    if(@d<@f)
    update equipe
     set nbre_pts=nbre_pts+3
    where id_equipe=@b
    if(@d=@f)
    update equipe
    set nbre_pts=nbre_pts+1
    where id_equipe=@a or id_equipe=@b
    end
    merci d'avance

  2. #2
    Expert éminent
    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
    Par défaut
    Merci d'éditer ton message pour le rendre plus lisible, lire le tutoriel PL/SQL, essayer de faire ta procédure et enfin, nous demander ce qui cloche si besoin

  3. #3
    Membre averti
    Inscrit en
    Décembre 2007
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 15
    Par défaut
    merci orafrance pour ta réponse ,et désolé pour le code car c'est ma premiere participation (surement pas la derniere) dans ce forum .
    on veut organiser un championnat de football
    pour chaque equipe on calcule le nombre de buts marqués et le nombre des buts encaissés
    donc celle qui gagne aura 3 point et l'autre 0 points bien sur et pour l'egalité on aura un point pour chaque equipe
    je veux faire une procédure qui permet d'ajouter un match , ayant comme parametre (ref_equipe1,ref_equipe2,score_equipe1,score_equipe2,date_du_match)
    voila ce que j'ai fais
    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
     
    create table equipe(
    id_equipe int primary key,
    nom varchar(20) not null,
    nbre_pts int default 0,
    nbre_marque int default 0,
    nbre_encaisse int default 0
    );
     
    create table match(
    id_equipe1 int,
    id_equipe2 int,
    dat date ,
    score_rec int, 
    score_inv int,
    constraint fk_e foreign key (id_equipe1) references equipe(id_equipe),
    constraint fk_n foreign key (id_equipe2) references equipe(id_equipe),
    constraint fc_e primary key (id_equipe1,id_equipe2)
    );
     
    create or replace procedure ajout_match(equipe1 in number,equipe2 in number,date_match in date,marque in number,encaisse in number) is
    begin 
    insert into match values(equipe1,equipe2,date_match,marque,encaisse);
    update equipe
    set nbre_marque=nbre_marque+marque, nbre_encaisse=nbre_encaisse+encaisse
    where id_equipe=equipe1;
    update equipe
    set nbre_marque=nbre_marque+encaisse, nbre_encaisse=nbre_encaisse+marque
    where id_equipe=equipe2;
    if(marque>encaisse)
    update equipe 
    set nbre_pts= nbre_pts+3
    where id_equipe=equipe1;
    end if;
    if(marque<encaisse)
    update equipe 
    set nbre_pts= nbre_pts+3
    where id_equipe=equipe2;
    end if;
    if(encaisse=marque)
    update equipe
    set nbre_pts=nbre_pts+1
    where id_equipe=equipe1 or id_equipe=equipe2;
    end if;
    end;
    mais cela n'a pas marché

  4. #4
    Expert éminent
    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
    Par défaut
    qu'est ce qui ne fonctionne pas ?

  5. #5
    Membre averti
    Inscrit en
    Décembre 2007
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 15
    Par défaut
    le compilateur m'affiche procédure crée avec erreur de compilation

  6. #6
    Invité
    Invité(e)
    Par défaut
    http://sheikyerbouti.developpez.com/...=Chap1#L1.2.11

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If ... 
      then ... 
    end if;
    Merci de faire un minimum d'effort sur la syntaxe tout de même

  7. #7
    Invité
    Invité(e)
    Par défaut
    En plus il faut lire le message du compilateur tout de même :
    Error(27,1): PLS-00103: Encountered the symbol "UPDATE" when expecting one of the following: * & = - + < / > at in is mod not rem then <an exponent (**)> <> or != or ~= >= <= <> and or like between overlaps || year DAY_ The symbol "then" was substituted for "UPDATE" to continue.
    http://www.developpez.net/forums/showthread.php?t=28716

  8. #8
    Membre averti
    Inscrit en
    Décembre 2007
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 15
    Par défaut
    merci pour ta réponse mais ça marche toujours pas

  9. #9
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par safiot85 Voir le message
    merci pour ta réponse mais ça marche toujours pas
    Merci pour cette réponse fort constructive...

    Qu'est ce qui ne marche pas ?
    Quel est le message d'erreur si il y en a un ?
    Qu'est-ce qui ne correspond pas à tes attentes ?
    Que veux-tu faire ?
    Qu'est-ce que tu as fait de plus ?

    As-tu lu : http://www.developpez.net/forums/showthread.php?t=28716
    Dernière modification par Invité ; 05/12/2007 à 22h14.

  10. #10
    Membre averti
    Inscrit en
    Décembre 2007
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 15
    Par défaut
    voici le résultat que j'obtient

    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
     
    SQL> create or replace procedure ajout_match(equipe1 in number,equipe2 in number,date_match in date,
    marque in number,encaisse in number) is
      2  begin 
      3  insert into match values(equipe1,equipe2,date_match,marque,encaisse);
      4  update equipe
      5  set nbre_marque=nbre_marque+marque, nbre_encaisse=nbre_encaisse+encaisse
      6  where id_equipe=equipe1;
      7  update equipe
      8  set nbre_marque=nbre_marque+encaisse, nbre_encaisse=nbre_encaisse+marque
      9  where id_equipe=equipe2;
     10  if(marque>encaisse)
     11  update equipe 
     12  set nbre_pts= nbre_pts+3
     13  where id_equipe=equipe1;
     14  end if;
     15  if(marque<encaisse)
     16  update equipe 
     17  set nbre_pts= nbre_pts+3
     18  where id_equipe=equipe2;
     19  end if;
     20  if(encaisse=marque)
     21  update equipe
     22  set nbre_pts=nbre_pts+1
     23  where id_equipe=equipe1 or id_equipe=equipe2;
     24  end if;
     25  end;
     26  /
     
    Avertissement : Procédure créée avec erreurs de compilation.
    et je veu par exemple entrer que l'equipe 3 a jouer contre l'equipe 4 le 12/03/2007 le score est 3-2
    voici l'appel de pa procédure
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    exec ajout_match(3,1,'03/03/2007',1,3);

  11. #11
    Expert éminent
    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
    Par défaut
    ajoute SHOW ERR à la fin du script pour connaitre les erreurs

  12. #12
    Membre averti
    Inscrit en
    Décembre 2007
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 15
    Par défaut
    ça donne une erreur que j'ai pas comprise la voici :
    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
     
    SQL> show err;
    Erreurs pour PROCEDURE AJOUT_MATCH :
     
    LINE/COL ERROR
    -------- -----------------------------------------------------------------
    11/1     PLS-00103: Symbole "UPDATE" rencontré à la place d'un des
             symboles suivants :
             * & = - + < / > at in is mod not rem then <an exponent (**)>
             <> or != or ~= >= <= <> and or like between overlaps || year
             DAY_
             Symbole "then" a été substitué à "UPDATE" pour continuer.
     
    16/1     PLS-00103: Symbole "UPDATE" rencontré à la place d'un des
             symboles suivants :
             * & = - + < / > at in is mod not rem then <an exponent (**)>
             <> or != or ~= >= <= <> and or like between overlaps || year
     
    LINE/COL ERROR
    -------- -----------------------------------------------------------------
             DAY_
             Symbole "then" a été substitué à "UPDATE" pour continuer.
     
    21/1     PLS-00103: Symbole "UPDATE" rencontré à la place d'un des
             symboles suivants :
             * & = - + < / > at in is mod not rem then <an exponent (**)>
             <> or != or ~= >= <= <> and or like between overlaps || year
             DAY_
             Symbole "then" a été substitué à "UPDATE" pour continuer.

  13. #13
    Expert éminent
    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
    Par défaut
    IF doit être suivie de THEN... on te l'a déjà dit

  14. #14
    Membre averti
    Inscrit en
    Décembre 2007
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 15
    Par défaut
    merci

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

Discussions similaires

  1. Insert dans deux tables.
    Par pcsystemd dans le forum Requêtes
    Réponses: 1
    Dernier message: 12/06/2009, 19h19
  2. [MySQL] Insertion dans deux tables liées
    Par franxi dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 19/06/2008, 21h22
  3. [MySQL] erreur dans la formulaire d'insertion dans deux table
    Par info_sara dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 10/06/2008, 21h57
  4. Insert dans deux tables en meme temps?
    Par radzar dans le forum Langage SQL
    Réponses: 3
    Dernier message: 11/04/2008, 11h33
  5. insertion dans deux tables
    Par bidule123456 dans le forum VBA Access
    Réponses: 1
    Dernier message: 29/08/2007, 08h19

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