Précédent   Forum des professionnels en informatique > Bases de données > Oracle
Oracle Forum Oracle : le serveur, les outils, ... Voir F.A.Q Oracle Tutoriels 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 13/01/2007, 02h12   #1
Invité de passage
 
Inscription : novembre 2005
Messages : 14
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 14
Points : 3
Points : 3
Par défaut Erreurs dans une procédure

Salut,

J'ai un problème avec une procédure que je n'arrive pas à débuger. Pouvez vous me donner un coup de main s'il vous plaît.

J'ai 2 tables media et son. Son hérite de média.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
CREATE TABLE media
(
	numMedia integer NOT NULL,
	titre varchar2(50) NOT NULL,
	auteur varchar2(50),
	extension char(4) NOT NULL,
	chemin varchar2(100) NOT NULL,
	constraint PK_MEDIA_NUMMEDIA PRIMARY KEY (numMedia),
	constraint CK_MEDIA_EXTENSION CHECK (extension LIKE ('.%'))
);
 
CREATE TABLE sons
(
	numMedia integer NOT NULL,
	duree timestamp NOT NULL,	
	constraint PK_SONS_NUMMEDIA PRIMARY KEY (numMedia),
	constraint FK_SONS_NUMMEDIA FOREIGN KEY (numMedia) REFERENCES mediamobile.media (numMedia) ON DELETE CASCADE
);
Le but de la procédure est de permettre l'insertion "quasi-simultanée" d'un media dans la table mère et fille avec le même numéro de média.

voici la procédure:

Code :
1
2
3
4
5
6
7
8
9
CREATE OR REPLACE PROCEDURE mediamobile.nvo_son (mtitre varchar2, mauteur varchar2, mextension char, mchemin varchar2, mduree timestamp)
IS
mnum integer;
BEGIN
	SELECT SEQ_media.NEXTVAL INTO mnum FROM DUAL;
	execute immediate 'insert into media values (seq_media.nextval ,'||mtitre||','||mauteur||','||mextension||','||mchemin||')';
	INSERT INTO sons VALUES (mnum, mduree);
END;
/
avec les messages d'erreur à son exécution:
Code :
1
2
3
4
5
6
7
 
- Erreurs constatées : 
 
ERREUR à la ligne 1:
ORA-00917 : virgule absente
ORA-06512 : à "MEDIAMOBILE.NVO_SON", ligne 6
ORA-06512 : à ligne 1
Merci.
zekicker est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/01/2007, 09h22   #2
Responsable Business Intelligence
 
Avatar de kalyparker
 
Femme
Consultant en Business Intelligence
Inscription : janvier 2007
Messages : 1 192
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations professionnelles :
Activité : Consultant en Business Intelligence

Informations forums :
Inscription : janvier 2007
Messages : 1 192
Points : 2 564
Points : 2 564
Salut,
Je ne sais pas si je vais être d'un grand secours, essaye ça

Code :
1
2
 
execute immediate 'insert into media values (seq_media.nextval ,'''||mtitre||''','''||mauteur||''','''||mextension||''','''||mchemin||''')';
Je pense que tes différents champs doivent être entouré de quotes.
kalyparker est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/01/2007, 14h09   #3
Invité de passage
 
Inscription : novembre 2005
Messages : 14
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 14
Points : 3
Points : 3
Citation:
Envoyé par kalyparker
Je ne sais pas si je vais être d'un grand secours, essaye ça

Code :
1
2
 
execute immediate 'insert into media values (seq_media.nextval ,'''||mtitre||''','''||mauteur||''','''||mextension||''','''||mchemin||''')';
Je pense que tes différents champs doivent être entouré de quotes.
Merci pour ton aide.
J'ai encore une erreur mais différente .

J'ai mis à jour la procédure --> ca passe
J'ai testé l'insertion (exe de la proc) --> ca casse

Rapport des erreurs :
ORA-02291 : violation de contrainte d'intégrité (Nom de la contrainte) - clé parent introuvable
ORA-06512 : à "MEDIAMOBILE.NVO_SON", ligne 7
ORA-06512 : à ligne 1
zekicker est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/01/2007, 14h36   #4
Responsable Business Intelligence
 
Avatar de kalyparker
 
Femme
Consultant en Business Intelligence
Inscription : janvier 2007
Messages : 1 192
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations professionnelles :
Activité : Consultant en Business Intelligence

Informations forums :
Inscription : janvier 2007
Messages : 1 192
Points : 2 564
Points : 2 564
L'erreur viens peut être du fait que tu n'a pas le même numéro de séquence sur tes 2 insertions...

Lorsque tu fais :
SELECT SEQ_media.NEXTVAL INTO mnum FROM DUAL;

je crois que tu avances ta séquence du pas que tu as défini.
Lorsque tu fais ton insert dans media tu refais un nextval
Essaye en mettant mnum dans media.
kalyparker est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/01/2007, 19h13   #5
Invité de passage
 
Inscription : novembre 2005
Messages : 14
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 14
Points : 3
Points : 3
Citation:
Envoyé par kalyparker
L'erreur viens peut être du fait que tu n'a pas le même numéro de séquence sur tes 2 insertions...

Lorsque tu fais :
SELECT SEQ_media.NEXTVAL INTO mnum FROM DUAL;

je crois que tu avances ta séquence du pas que tu as défini.
Lorsque tu fais ton insert dans media tu refais un nextval
Essaye en mettant mnum dans media.
Que faut-il que je mette alors ?
zekicker est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/01/2007, 19h30   #6
Responsable Business Intelligence
 
Avatar de kalyparker
 
Femme
Consultant en Business Intelligence
Inscription : janvier 2007
Messages : 1 192
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations professionnelles :
Activité : Consultant en Business Intelligence

Informations forums :
Inscription : janvier 2007
Messages : 1 192
Points : 2 564
Points : 2 564
Je ne suis pas sûre du résultat, je n'ai pas encore installé oracle chez moi alors je peux pas tester...

Mais si tu fais :
Code :
1
2
3
4
 
SELECT SEQ_media.NEXTVAL INTO mnum FROM DUAL;
execute immediate 'insert into media values ('||mnum||','''||mtitre||''','''||mauteur||''','''||mextension||''','''||mchemin||''')';
INSERT INTO sons VALUES (mnum, mduree);
Je pense que ça peux marcher
kalyparker est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/01/2007, 19h49   #7
Invité de passage
 
Inscription : novembre 2005
Messages : 14
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 14
Points : 3
Points : 3
Citation:
Envoyé par kalyparker
si tu fais :

Code :
1
2
3
4
 
SELECT SEQ_media.NEXTVAL INTO mnum FROM DUAL;
execute immediate 'insert into media values ('||mnum||','''||mtitre||''','''||mauteur||''','''||mextension||''','''||mchemin||''')';
INSERT INTO sons VALUES (mnum, mduree);
Encore une erreur décidément :s.

ORA-01722: Nombre non valide
ORA-06512: à "MEDIAMOBILE.NVO_SON", ligne 1
ORA-06512 : à ligne 1
zekicker est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/01/2007, 21h42   #8
Invité de passage
 
Inscription : novembre 2005
Messages : 14
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 14
Points : 3
Points : 3
Finalement j'ai tout effacé et tout recommencé et ça marche :
Merci pour ton aide kalyparker

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
CREATE OR REPLACE PROCEDURE mediamobile.nvo_son (mtitre varchar2, mauteur varchar2, mextension char, mchemin varchar2, mduree timestamp)
IS
mnum
integer;
sqlstt
varchar(100);
BEGIN
SELECT SEQ_media.NEXTVAL INTO mnum FROM DUAL;
sqlstt:= 'insert into media values (:1,:2,:3,:4,:5)';
execute immediate sqlstt USING mnum,mtitre,mauteur,mextension,mchemin;
commit;
INSERT INTO sons VALUES (mnum, mduree);
END
;
/
zekicker est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/01/2007, 21h48   #9
Membre Expert
 
Inscription : avril 2006
Messages : 1 024
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 1 024
Points : 1 175
Points : 1 175


et pourquoi pas:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
 
CREATE OR REPLACE PROCEDURE mediamobile.nvo_son (mtitre varchar2, mauteur varchar2, mextension char, mchemin varchar2, mduree timestamp)
IS
mnum integer;
BEGIN
SELECT SEQ_media.NEXTVAL INTO mnum FROM DUAL;
INSERT INTO media VALUES (mnum,mtitre,mauteur,mextension,mchemin);
INSERT INTO sons VALUES (mnum, mduree);
commit;
END
;
/
?
remi4444 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/01/2007, 08h14   #10
Responsable Business Intelligence
 
Avatar de kalyparker
 
Femme
Consultant en Business Intelligence
Inscription : janvier 2007
Messages : 1 192
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations professionnelles :
Activité : Consultant en Business Intelligence

Informations forums :
Inscription : janvier 2007
Messages : 1 192
Points : 2 564
Points : 2 564
Citation:
Merci pour ton aide kalyparker
De rien, l'essentiel est que ça marche
kalyparker 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 19h35.


 
 
 
 
Partenaires

Hébergement Web