Précédent   Forum des professionnels en informatique > Bases de données > MySQL > Requêtes
Requêtes Forum d'entraide sur les requêtes MySQL
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 31/01/2012, 22h12   #1
Invité de passage
 
Homme Jérémi
Développeur informatique
Inscription : janvier 2012
Messages : 3
Détails du profil
Informations personnelles :
Nom : Homme Jérémi
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : janvier 2012
Messages : 3
Points : 0
Points : 0
Par défaut INSERT INTO paramétré par rapport à des données existantes

Bonsoir à tous,

Tout d'abord, je tiens à préciser que j'ai déjà cherché dans le forum (pendant une heure en fait) et que je n'ai pas trouvé de réponse à ma question.


Je cherche à créer des données dans une table en fonction de données présentes dans une autre table. Nous sommes en phase de production et certains éléments de la base doivent être entrés manuellement, ce qui s'avère compliqué lorsque le client change d'avis comme de chemise et fourni une quantité de données croissantes.

pour résumer de manière simple :

table_1 :
[pk_1, champ1_1, champ1_2]

table_2 :
[pk_2, champ2_1, champ2_2]

on a une relation 1,n avec pk_1=champ2_1

je voudrais créer des entrées dans la table 2 (une par élément de la table 1) avec une valeur statique dans le champ2_1.


Mes investigations m'ont conduit à écrire ceci (qui ne marche pas), en espérant ne pas être au summum du ridicule et que ça vous aide à comprendre :

Code :
1
2
3
4
5
6
7
8
9
10
11
 
CREATE PROCEDURE insert_ref()
BEGIN
	DECLARE ids CURSOR FOR SELECT pk_1 FROM annuaire_crediteur;
	DECLARE id INT(11);
	OPEN ids;
	REPEAT
		INSERT INTO table_2(champ2_1, champ2_2) VALUES (id, 'blabla');
	UNTIL id ==NULL EN REPEAT;
	CLOSE ids;	
END
n'hésitez pas à me poser des questions pour percer mon esprit des plus étranges.

Merci à tout ceux qui m'auront lu, avec ou sans solution.
jeremifl est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2012, 00h17   #2
Membre Expert
 
Homme Eric Dureuil
Développeur informatique
Inscription : avril 2011
Messages : 874
Détails du profil
Informations personnelles :
Nom : Homme Eric Dureuil
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : avril 2011
Messages : 874
Points : 1 361
Points : 1 361
salut,

normal, il y a 2 problèmes:
  • tu lis jamais ton curseur
  • et c'est "end repeat"


Code sql :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
delimiter $$
DROP procedure IF EXISTS insert_ref$$
CREATE PROCEDURE insert_ref()
BEGIN
	DECLARE ids CURSOR FOR SELECT pk_1 FROM annuaire_crediteur;
	DECLARE id INT(11);
	OPEN ids;
	REPEAT
		fetch ids INTO id;
		INSERT INTO table_2(champ2_1, champ2_2) VALUES (id, 'blabla');
	UNTIL id ==NULL END REPEAT;
	CLOSE ids;	
END$$
delimiter ;

ça marchera mais je te conseille de tester si tu arrives enfin de curseur, c'est plus propre... ça peut se faire en déclarant un handler et en testant avec si tu atteint la fin alors tu commute un if qui entoure ton insert pour ne le faire que si tu as besoin...
__________________
Eric Dureuil, développeur web, c/c++, java indépendant
soyons
pensez à mettre et
ericd69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2012, 18h20   #3
Invité de passage
 
Homme Jérémi
Développeur informatique
Inscription : janvier 2012
Messages : 3
Détails du profil
Informations personnelles :
Nom : Homme Jérémi
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : janvier 2012
Messages : 3
Points : 0
Points : 0
Citation:
Envoyé par ericd69 Voir le message
salut,

normal, il y a 2 problèmes:
  • tu lis jamais ton curseur
  • et c'est "end repeat"
Ah, ça se lit un curseur ?
Je n'avais pas compris du tout comment ça marche en fait, merci de m'éclairer.

Pour le "end repeat", une erreur de saisie, bien entendu.

Citation:
Envoyé par ericd69 Voir le message
ça marchera mais je te conseille de tester si tu arrives enfin de curseur, c'est plus propre... ça peut se faire en déclarant un handler et en testant avec si tu atteint la fin alors tu commute un if qui entoure ton insert pour ne le faire que si tu as besoin...
En fait, c'est ce que je pensais faire, mais j'étais pas vraiment en état de comprendre manifestement.

En tout cas, un grand merci et si jamais tu connais un bon tuto/cours pour SQL/MySQL, je suis preneur !

Bonne soirée, vu que c'est déjà la soirée
jeremifl est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2012, 19h02   #4
Membre Expert
 
Homme Eric Dureuil
Développeur informatique
Inscription : avril 2011
Messages : 874
Détails du profil
Informations personnelles :
Nom : Homme Eric Dureuil
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : avril 2011
Messages : 874
Points : 1 361
Points : 1 361
regarde déjà les cours sur le site, ils sont pas mal fait
__________________
Eric Dureuil, développeur web, c/c++, java indépendant
soyons
pensez à mettre et
ericd69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2012, 20h19   #5
Invité de passage
 
Homme Jérémi
Développeur informatique
Inscription : janvier 2012
Messages : 3
Détails du profil
Informations personnelles :
Nom : Homme Jérémi
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : janvier 2012
Messages : 3
Points : 0
Points : 0
OK, merci beaucoup encore une fois.
jeremifl 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 11h34.


 
 
 
 
Partenaires

Hébergement Web