Précédent   Forum des professionnels en informatique > Bases de données > Oracle > PL/SQL
PL/SQL Forum d'entraide sur le PL/SQL
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/03/2011, 10h45   #1
Membre confirmé
 
Avatar de PAYASS59
 
Homme
Inscription : février 2005
Messages : 735
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 30
Localisation : France, Nord (Nord Pas de Calais)

Informations forums :
Inscription : février 2005
Messages : 735
Points : 291
Points : 291
Par défaut Insert de plusieurs lignes

Bonjour,

Voici mon problème :

J'ai dans une procédure PLSQL à un moment :
Code :
1
2
3
4
5
 
[...]
SELECT.......FROM.....;
INSERT INTO....... ;
[...]
Le problème est que mon select peut me récupérer plusieurs lignes et de ce fait là le INSERT plante et mes lignes ne sont pas insérées.
Que dois-je faire pour éviter le problème.

Je précise que je suis novice en pl/sql.

Merci de votre aide.
__________________
Je préfère ma soif d'apprendre, à leurs certitudes de savoir....
PAYASS59 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/03/2011, 10h53   #2
Membre chevronné
 
Homme O. Joly
Support
Inscription : décembre 2010
Messages : 287
Détails du profil
Informations personnelles :
Nom : Homme O. Joly
Âge : 38
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : Support
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : décembre 2010
Messages : 287
Points : 617
Points : 617
Code :
INSERT INTO <table> SELECT <cols> FROM ...
Le nombre de colonne et l'ordre de celles-ci dans le select doit correspondre à ceux de la table.
ojo77 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/03/2011, 11h21   #3
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 684
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2008
Messages : 5 684
Points : 10 442
Points : 10 442
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
Ou pour lever l'ambiguïté et être insensible aux ajouts de colonnes :
Code :
1
2
INSERT INTO <table> (<colonnes>)
SELECT <cols> FROM ...
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/03/2011, 11h48   #4
Membre confirmé
 
Avatar de PAYASS59
 
Homme
Inscription : février 2005
Messages : 735
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 30
Localisation : France, Nord (Nord Pas de Calais)

Informations forums :
Inscription : février 2005
Messages : 735
Points : 291
Points : 291
le problème est dans mon Insert j'ai des variables qui ne sont pas issues de mon select mais par exemple de variables se trouvant dans le déclare.


n'est-il pas possible de compter le nombre de résultat du SELECT et de faire un .... while INSERT ?
__________________
Je préfère ma soif d'apprendre, à leurs certitudes de savoir....
PAYASS59 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/03/2011, 12h17   #5
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 684
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2008
Messages : 5 684
Points : 10 442
Points : 10 442
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
Vous pouvez sélectionner votre variable dans votre requête :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
declare
    v_num   char(1);
begin
    v_num := 'A';
    FOR c_req IN
    (
    SELECT dummy AS c1, '1' AS c2, v_num AS c3
      FROM dual
    )
    loop
        dbms_output.put_line('C1 : ' || c_req.c1);
        dbms_output.put_line('C2 : ' || c_req.c2);
        dbms_output.put_line('C3 : ' || c_req.c3);
    end loop;
end;
 
C1 : X
C2 : 1
C3 : A
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/03/2011, 12h21   #6
Membre actif
 
Homme
Administrateur de base de données
Inscription : décembre 2008
Messages : 106
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Sénégal

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : décembre 2008
Messages : 106
Points : 151
Points : 151
tu me recupers le select dans un curseur , et faire ton insert comme tu le souhaites en y ajoutant tes parametres
umarus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/03/2011, 15h13   #7
Membre confirmé
 
Avatar de PAYASS59
 
Homme
Inscription : février 2005
Messages : 735
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 30
Localisation : France, Nord (Nord Pas de Calais)

Informations forums :
Inscription : février 2005
Messages : 735
Points : 291
Points : 291
merci pour vos réponses, je suis parti sur la méthode de WALDAR.


Si je fais :

Code :
DBMS_OUTPUT.PUT_LINE(c_req.dated||'  '||c_req.datef||'  '|| c_req.mat||'  '||c_req.unite||'  '||c_req.secteur||'  '||c_req.code_grade||'  '||c_req.mipares||'  '||c_req.regime||'  '||c_req.activite_reelle);
cela m'affiche bien le résultat de mon select

par contre :

Code :
1
2
 
INSERT INTO ETP@sas(date_deb_periode,date_fin_periode,matricule,code_secteur,code_uf,code_grade,code_mipares,etp_theo,etp_reel) VALUES (c_req.dated,c_req.datef,c_req.mat,c_req.secteur,c_req.unite,c_req.code_grade,c_req.mipares,c_req.regime,c_req.activite_reelle);
Cela m'insère aucune ligne.

Avez-vous une idée ? peut-on avoir un moyen en pl/sql de retourner une erreur sur un insert ?
__________________
Je préfère ma soif d'apprendre, à leurs certitudes de savoir....
PAYASS59 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/03/2011, 15h24   #8
Expert Confirmé Sénior
 
Avatar de mnitu
 
Homme Marius Nitu
Ingénieur développement logiciels
Inscription : octobre 2007
Messages : 3 311
Détails du profil
Informations personnelles :
Nom : Homme Marius Nitu
Localisation : France, Marne (Champagne Ardenne)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2007
Messages : 3 311
Points : 5 808
Points : 5 808
Citation:
Envoyé par PAYASS59 Voir le message
...Cela m'insère aucune ligne.

Avez-vous une idée ? peut-on avoir un moyen en pl/sql de retourner une erreur sur un insert ?
Cherchez dans votre procédure le code
WHEN OTHERS THEN
non suivi d'un RAISE et virez-le!
mnitu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/03/2011, 15h38   #9
Membre confirmé
 
Avatar de PAYASS59
 
Homme
Inscription : février 2005
Messages : 735
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 30
Localisation : France, Nord (Nord Pas de Calais)

Informations forums :
Inscription : février 2005
Messages : 735
Points : 291
Points : 291
désolé j'insere un champ vide dans une colonne obligatoire
__________________
Je préfère ma soif d'apprendre, à leurs certitudes de savoir....
PAYASS59 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 03h47.


 
 
 
 
Partenaires

Hébergement Web