Précédent   Forum des professionnels en informatique > Bases de données > Oracle > SQL
SQL Forum d'entraide sur le SQL pour Oracle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 05/12/2007, 19h11   #1
Invité de passage
 
Inscription : décembre 2007
Messages : 15
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 15
Points : 2
Points : 2
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 :
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
safiot85 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/12/2007, 19h32   #2
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
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
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/12/2007, 19h51   #3
Invité de passage
 
Inscription : décembre 2007
Messages : 15
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 15
Points : 2
Points : 2
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 :
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é
safiot85 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/12/2007, 20h44   #4
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
qu'est ce qui ne fonctionne pas ?
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/12/2007, 20h56   #5
Invité de passage
 
Inscription : décembre 2007
Messages : 15
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 15
Points : 2
Points : 2
le compilateur m'affiche procédure crée avec erreur de compilation
safiot85 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/12/2007, 20h56   #6
Expert Confirmé
 
Avatar de 7gyY9w1ZY6ySRgPeaefZ
 
Homme
dba
Inscription : juillet 2007
Messages : 2 523
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Canada

Informations professionnelles :
Activité : dba

Informations forums :
Inscription : juillet 2007
Messages : 2 523
Points : 3 972
Points : 3 972
http://sheikyerbouti.developpez.com/...=Chap1#L1.2.11

Code :
1
2
3
If ... 
  then ... 
end if;
Merci de faire un minimum d'effort sur la syntaxe tout de même
7gyY9w1ZY6ySRgPeaefZ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/12/2007, 20h58   #7
Expert Confirmé
 
Avatar de 7gyY9w1ZY6ySRgPeaefZ
 
Homme
dba
Inscription : juillet 2007
Messages : 2 523
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Canada

Informations professionnelles :
Activité : dba

Informations forums :
Inscription : juillet 2007
Messages : 2 523
Points : 3 972
Points : 3 972
En plus il faut lire le message du compilateur tout de même :
Citation:
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/d28716/bases-donnees/oracle/regles-infos-lire-poster/
7gyY9w1ZY6ySRgPeaefZ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/12/2007, 21h43   #8
Invité de passage
 
Inscription : décembre 2007
Messages : 15
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 15
Points : 2
Points : 2
merci pour ta réponse mais ça marche toujours pas
safiot85 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/12/2007, 21h47   #9
Expert Confirmé
 
Avatar de 7gyY9w1ZY6ySRgPeaefZ
 
Homme
dba
Inscription : juillet 2007
Messages : 2 523
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Canada

Informations professionnelles :
Activité : dba

Informations forums :
Inscription : juillet 2007
Messages : 2 523
Points : 3 972
Points : 3 972
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
7gyY9w1ZY6ySRgPeaefZ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/12/2007, 22h16   #10
Invité de passage
 
Inscription : décembre 2007
Messages : 15
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 15
Points : 2
Points : 2
voici le résultat que j'obtient

Code :
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 :
exec ajout_match(3,1,'03/03/2007',1,3);
safiot85 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/12/2007, 22h29   #11
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
ajoute SHOW ERR à la fin du script pour connaitre les erreurs
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/12/2007, 22h49   #12
Invité de passage
 
Inscription : décembre 2007
Messages : 15
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 15
Points : 2
Points : 2
ça donne une erreur que j'ai pas comprise la voici :
Code :
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.
safiot85 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/12/2007, 22h54   #13
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
IF doit être suivie de THEN... on te l'a déjà dit
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/12/2007, 23h14   #14
Invité de passage
 
Inscription : décembre 2007
Messages : 15
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 15
Points : 2
Points : 2
merci
safiot85 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 11h21.


 
 
 
 
Partenaires

Hébergement Web