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

PL/SQL Oracle Discussion :

Insert de plusieurs lignes


Sujet :

PL/SQL Oracle

  1. #1
    Membre averti Avatar de PAYASS59
    Homme Profil pro
    Inscrit en
    Février 2005
    Messages
    755
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Février 2005
    Messages : 755
    Points : 324
    Points
    324
    Par défaut Insert de plusieurs lignes
    Bonjour,

    Voici mon problème :

    J'ai dans une procédure PLSQL à un moment :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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....

  2. #2
    Membre expérimenté Avatar de ojo77
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Décembre 2010
    Messages
    680
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2010
    Messages : 680
    Points : 1 597
    Points
    1 597
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  3. #3
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Ou pour lever l'ambiguïté et être insensible aux ajouts de colonnes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    INSERT INTO <table> (<colonnes>)
    SELECT <cols> FROM ...

  4. #4
    Membre averti Avatar de PAYASS59
    Homme Profil pro
    Inscrit en
    Février 2005
    Messages
    755
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Février 2005
    Messages : 755
    Points : 324
    Points
    324
    Par défaut
    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....

  5. #5
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Vous pouvez sélectionner votre variable dans votre requête :
    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
    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

  6. #6
    Membre actif

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2008
    Messages
    109
    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 : 109
    Points : 204
    Points
    204
    Par défaut
    tu me recupers le select dans un curseur , et faire ton insert comme tu le souhaites en y ajoutant tes parametres

  7. #7
    Membre averti Avatar de PAYASS59
    Homme Profil pro
    Inscrit en
    Février 2005
    Messages
    755
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Février 2005
    Messages : 755
    Points : 324
    Points
    324
    Par défaut
    merci pour vos réponses, je suis parti sur la méthode de WALDAR.


    Si je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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....

  8. #8
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    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 : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    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!

  9. #9
    Membre averti Avatar de PAYASS59
    Homme Profil pro
    Inscrit en
    Février 2005
    Messages
    755
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Février 2005
    Messages : 755
    Points : 324
    Points
    324
    Par défaut
    désolé j'insere un champ vide dans une colonne obligatoire
    Je préfère ma soif d'apprendre, à leurs certitudes de savoir....

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

Discussions similaires

  1. [WD9] Insertion de plusieur lignes dans une rubrique
    Par loic20h28 dans le forum WinDev
    Réponses: 39
    Dernier message: 06/06/2008, 19h02
  2. insertion de plusieurs lignes
    Par opensource dans le forum Langage SQL
    Réponses: 4
    Dernier message: 02/01/2008, 16h36
  3. Insertion de plusieurs lignes
    Par pepi22 dans le forum Requêtes et SQL.
    Réponses: 17
    Dernier message: 24/08/2007, 20h15
  4. Insert de plusieurs lignes
    Par abibac dans le forum Langage SQL
    Réponses: 1
    Dernier message: 23/03/2007, 13h42
  5. insertion de plusieurs lignes, comment faire ?
    Par RR instinct dans le forum SQL
    Réponses: 6
    Dernier message: 23/01/2007, 09h40

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