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

Oracle Discussion :

Insertion de multiples lignes.


Sujet :

Oracle

  1. #1
    Membre à l'essai
    Inscrit en
    Septembre 2005
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 51
    Points : 16
    Points
    16
    Par défaut Insertion de multiples lignes.
    Bonjour a tous,

    j'ai voulus effectué une commande spécifié danc le tutoriel sql http://sqlpro.developpez.com/cours/sqlaz/dml/#L1.2 mes cela sans succés malgrès une base de donnée oracle.

    La commande en question est l'insertion explicite de multiple lignes de l'exemple 5:

    INSERT T_TITRE
    VALUES ('M.' , 'Monsieur',
    'Mlle.' , 'Mademoiselle'
    'Mme.' , 'Madame')


    J'obtiens une erreur " INTO manquant" !

    Pourquoi cette erreur et comment faire cette requette car j'ai beaucoup de lignes à insérer ?


    Merci par avance.

  2. #2
    Membre éprouvé Avatar de Yorglaa
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    845
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2004
    Messages : 845
    Points : 931
    Points
    931
    Par défaut
    une petite révision des fondamentaux s'impose...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Insert INTO t_titre values ('M.' , 'Monsieur', 
    'Mlle.' , 'Mademoiselle' 
    'Mme.' , 'Madame')
    Il est plus facile de voir les signes avant-coureurs après coup que l'inverse !

    Yorglaa

  3. #3
    Membre à l'essai
    Inscrit en
    Septembre 2005
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 51
    Points : 16
    Points
    16
    Par défaut
    Si j'execute j'ai l'erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ORA-00913: trop de valeurs
    J'ai déjà essayé.

  4. #4
    Membre expert
    Avatar de LeoAnderson
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 938
    Points : 3 199
    Points
    3 199
    Par défaut
    Attention : le doc. de SQLPro est relatif à la norme SQL.
    Hors il se trouve Oracle est bien basé sur la norme SQL mais ils n'hésitent pas à faire quelques écarts par rapport à cette norme.

    Il n'est donc pas si rare d'avoir des instructions SQL valides (au sens de la norme) mais qui sont rejetées par Oracle....

  5. #5
    Rédacteur

    Homme Profil pro
    Consultant / formateur Oracle et SQL Server
    Inscrit en
    Décembre 2002
    Messages
    3 460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant / formateur Oracle et SQL Server

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 460
    Points : 8 074
    Points
    8 074
    Par défaut
    Citation Envoyé par Yorglaa
    une petite révision des fondamentaux s'impose...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Insert INTO t_titre values ('M.' , 'Monsieur', 
    'Mlle.' , 'Mademoiselle' 
    'Mme.' , 'Madame')
    Ah oui ?
    J'en prendrai volontiers une louche aussi alors !

    Parce qu'à l'usage, cette syntaxe ne passe pas, et je ne trouve rien dans la doc (10g) qui laisse à penser qu'elle soit supportée.
    Consultant / formateur Oracle indépendant
    Certifié OCP 12c, 11g, 10g ; sécurité 11g

    Ma dernière formation Oracle 19c publiée sur Linkedin : https://fr.linkedin.com/learning/oracle-19c-l-administration

  6. #6
    Membre éprouvé Avatar de Yorglaa
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    845
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2004
    Messages : 845
    Points : 931
    Points
    931
    Par défaut
    en effet ! mea culpa !

    j'ai été un peu vite en besogne et me suis fourvoyé avec la syntaxe d'un insert "classique"...

    oups, navré !

    ceci dit, tiré du document en question :
    NOTA : le constructeur de lignes valuées est rarement implémenté dans les SGBDR. Oracle est l'un de seuls à accepter une telle syntaxe.
    je suis donc aussi curieux de savoir d'ou provient cette info et ces exemples (quelle version d'Oracle ?)
    Il est plus facile de voir les signes avant-coureurs après coup que l'inverse !

    Yorglaa

  7. #7
    Membre émérite Avatar de nuke_y
    Profil pro
    Indépendant en analyse de données
    Inscrit en
    Mai 2004
    Messages
    2 076
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Indépendant en analyse de données

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 076
    Points : 2 370
    Points
    2 370
    Par défaut
    Je dois être con mais dans ce code là je trouve qu'il manque surtout une virgule après Mademoiselle (en considérant que la syntaxe soit possible sous Oracle) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    INSERT T_TITRE
           VALUES  ('M.'    , 'Monsieur',
                    'Mlle.' , 'Mademoiselle'
                    'Mme.'  , 'Madame')
    Il vaut mieux monopoliser son intelligence sur des bêtises que sa bêtise sur des choses intelligentes.

  8. #8
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Je crois pas que ce soit le problème. De toute façon mieux vaut mettre le nom des colonnes après la table.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    INSERT INTO T_TITRE (CODE, LIB)
           VALUES  ('M.'    , 'Monsieur');
    INSERT INTO T_TITRE (CODE, LIB)
           VALUES  ('Mlle.' , 'Mademoiselle');
    INSERT INTO T_TITRE (CODE, LIB)
           VALUES  ('Mme.'  , 'Madame');
    PS : Rappel pour les erreurs ORA :
    http://ora-xxxxx.ora-code.com/
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  9. #9
    Membre éclairé Avatar de plabrevo
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    547
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 547
    Points : 670
    Points
    670
    Par défaut
    On peut aussi le gerer en multiinsert:

    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
    20
    CREATE TABLE my_table
    (id1             INTEGER
    ,col1            VARCHAR2(4000))
    /
    INSERT ALL
      INTO my_table (id1, col1) VALUES (1,'Line1')
      INTO my_table (id1, col1) VALUES (2,'Line2')
      INTO my_table (id1, col1) VALUES (3,'Line3')
      INTO my_table (id1, col1) VALUES (4,'Line4')
      INTO my_table (id1, col1) VALUES (5,'Line5')
    SELECT 1 FROM dual
    /
    SELECT id1
    FROM   my_table
    /
    COMMIT
    /
     
    DROP TABLE my_table
    /

    Table created.


    5 rows created.


    ID1
    ------
    1
    2
    3
    4
    5

    5 rows selected.


    Commit complete.


    Table dropped.

  10. #10
    Nouveau membre du Club
    Inscrit en
    Mai 2002
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 35
    Points : 36
    Points
    36
    Par défaut
    Salut...

    Moi j'aurai écrit plutôt ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    INSERT T_TITRE INTO (Titre, Libelle)
           VALUES  ('M.'    , 'Monsieur', 
                    'Mlle.' , 'Mademoiselle' 
                    'Mme.'  , 'Madame')

  11. #11
    Membre expert
    Avatar de LeoAnderson
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 938
    Points : 3 199
    Points
    3 199
    Par défaut
    Citation Envoyé par Titia765
    Salut...

    Moi j'aurai écrit plutôt ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    INSERT T_TITRE INTO (Titre, Libelle)
           VALUES  ('M.'    , 'Monsieur', 
                    'Mlle.' , 'Mademoiselle' 
                    'Mme.'  , 'Madame')
    Citation Envoyé par ludvax
    (...)
    La commande en question est l'insertion explicite de multiple lignes de l'exemple 5:

    INSERT T_TITRE
    VALUES ('M.' , 'Monsieur',
    'Mlle.' , 'Mademoiselle'
    'Mme.' , 'Madame')


    J'obtiens une erreur " INTO manquant" !
    (...)
    Vous voyez pas comme un problème ???

    Merci de lire l'intégralité des interventions avant de poster, notamment quand vous proposez exactement le code qui pose problème initialement.
    Sans oublier qu'il est bon d'intervenir, mais à bon escient... C'est à dire de ne poster que des réponses dont on est sûr ! ;-)

  12. #12
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Oups
    Corrigé mon code...
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  13. #13
    Nouveau membre du Club
    Inscrit en
    Mai 2002
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 35
    Points : 36
    Points
    36
    Par défaut
    Citation Envoyé par LeoAnderson
    Citation Envoyé par Titia765
    Salut...

    Moi j'aurai écrit plutôt ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    INSERT T_TITRE INTO (Titre, Libelle)
           VALUES  ('M.'    , 'Monsieur', 
                    'Mlle.' , 'Mademoiselle' 
                    'Mme.'  , 'Madame')
    Citation Envoyé par ludvax
    (...)
    La commande en question est l'insertion explicite de multiple lignes de l'exemple 5:

    INSERT T_TITRE
    VALUES ('M.' , 'Monsieur',
    'Mlle.' , 'Mademoiselle'
    'Mme.' , 'Madame')


    J'obtiens une erreur " INTO manquant" !
    (...)
    Vous voyez pas comme un problème ???

    Merci de lire l'intégralité des interventions avant de poster, notamment quand vous proposez exactement le code qui pose problème initialement.
    Sans oublier qu'il est bon d'intervenir, mais à bon escient... C'est à dire de ne poster que des réponses dont on est sûr ! ;-)
    Il suffit de lire ATTENTIVEMENT pour se rendre compte que j'ai rajouté une clause INTO... Il ne s'agit donc pas du même code...

  14. #14
    Membre expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Points : 3 609
    Points
    3 609
    Par défaut
    Citation Envoyé par Titia765
    Citation Envoyé par LeoAnderson
    Citation Envoyé par Titia765
    Salut...

    Moi j'aurai écrit plutôt ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    INSERT T_TITRE INTO (Titre, Libelle)
           VALUES  ('M.'    , 'Monsieur', 
                    'Mlle.' , 'Mademoiselle' 
                    'Mme.'  , 'Madame')
    Citation Envoyé par ludvax
    (...)
    La commande en question est l'insertion explicite de multiple lignes de l'exemple 5:

    INSERT T_TITRE
    VALUES ('M.' , 'Monsieur',
    'Mlle.' , 'Mademoiselle'
    'Mme.' , 'Madame')


    J'obtiens une erreur " INTO manquant" !
    (...)
    Vous voyez pas comme un problème ???

    Merci de lire l'intégralité des interventions avant de poster, notamment quand vous proposez exactement le code qui pose problème initialement.
    Sans oublier qu'il est bon d'intervenir, mais à bon escient... C'est à dire de ne poster que des réponses dont on est sûr ! ;-)
    Il suffit de lire ATTENTIVEMENT pour se rendre compte que j'ai rajouté une clause INTO... Il ne s'agit donc pas du même code...
    1. Votre syntaxe est incorrecte : il faut faire insert into t_titre et non insert t_titre into

    2. Avez-vous testé votre solution ? Si oui sous quelle version ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    SQL> create table t_titre (titre varchar2(30), libelle varchar2(30));
    Table créée.
     
    SQL> INSERT  INTO T_TITRE (Titre, Libelle)
      2         VALUES  ('M.'    , 'Monsieur', 
      3                  'Mlle.' , 'Mademoiselle' 
      4                  'Mme.'  , 'Madame');
                    'Mme.'  , 'Madame')
                    *
    ERREUR à la ligne 4 :
    ORA-00917: missing comma
     
    SQL> show release
    release 902000400
    Un problème sans solution est un problème mal posé

    Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP.

  15. #15
    Membre éprouvé Avatar de Yorglaa
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    845
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2004
    Messages : 845
    Points : 931
    Points
    931
    Par défaut
    Salut PlaineR,
    dans ton cas précis, il manque une virgule après 'Mademoiselle'

    mais ça ne résoud pas le "mystère" de cette syntaxe

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SQL> INSERT  INTO T_TITRE (Titre, Libelle) 
      2             VALUES  ('M.'    , 'Monsieur', 
      3                      'Mlle.' , 'Mademoiselle',
      4                      'Mme.'  , 'Madame'); 
    INSERT  INTO T_TITRE (Titre, Libelle)
                 *
    ERREUR à la ligne 1 :
    ORA-00913: too many values
    SQL> show release
    release 902000600
    Il est plus facile de voir les signes avant-coureurs après coup que l'inverse !

    Yorglaa

  16. #16
    Membre expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Points : 3 609
    Points
    3 609
    Par défaut
    Citation Envoyé par Yorglaa
    Salut PlaineR,
    dans ton cas précis, il manque une virgule après 'Mademoiselle'
    Exact, je n'ai pas copier la bonne commande
    Sinon j'ai la même erreur que toi, bien évidemment
    Un problème sans solution est un problème mal posé

    Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP.

  17. #17
    Membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Août 2007
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Août 2007
    Messages : 59
    Points : 69
    Points
    69
    Par défaut Solution proposée par 'plabrevo'
    Bonjour plabrevo,

    1.)la solution que tu propose (ci-dessous) s'éxecute sans erreur. Bravo et merci !

    INSERT ALL
    INTO ... (,,) ... values (,,)
    INTO ... (,,) ... values (,,)
    INTO ... (,,) ... values (,,)
    INTO ... (,,) ... values (,,)
    select 1 from dual

    2.)Cependant, j'ai une question :

    que signifie la dernière instruction 'select 1 from dual' ?

    Quel sens a-t-elle à la fin d'une insertion multiple ?

    Merci pour ton éclairage.

    chat_roux

  18. #18
    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
    Je ne pense pas que plaprevo va répondre.
    La syntaxe d'un insert multi table impose une sous interrogation.

    { ALL insert_into_clause
    [ values_clause ] [error_logging_clause]
    [ insert_into_clause
    [ values_clause ] [error_logging_clause]
    ]...
    | conditional_insert_clause
    }
    subquery

  19. #19
    Membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Août 2007
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Août 2007
    Messages : 59
    Points : 69
    Points
    69
    Par défaut Sous-interrogation -- n'importe laquelle convient ?
    Bonjour,

    bien compris l'obligation de mettre une sous-interrogation (select 1 from dual) à la fin de mon 'insertion multitables'. Car la syntaxe nous l'impose.

    Cependant, j'ai plusieurs questions :

    1.)Peut-on mettre n'importe quelle sous-interrogation ?
    Exemple : select * from xxx
    2.)L'insertion multitables réussira-t-elle aussi ? J'avoue que je n'ai pas essayé.


    Merci pour ces précisions, et désolé d'insister sur des détails : j'en ai besoin sur mon projet.

    chat_roux

  20. #20
    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
    Ca dépend de votre besoin, le SELECT 1 FROM DUAL est utile lorsque ce sont des constantes qui sont insérées.

    Si vous voulez insérer des valeurs issues d'une requête, il faut bien entendu l'utiliser.
    Vous pouvez dans l'insert choisir les colonnes de cette dernière, que ce soit un insert simple ou multiple.

Discussions similaires

  1. Insert ou Update lignes multiples
    Par DeWaRs dans le forum Langage SQL
    Réponses: 8
    Dernier message: 18/05/2012, 17h49
  2. [MySQL] [Impossible] insertion de multiples ligne
    Par Akim13 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 21/04/2012, 23h14
  3. [MySQL] insertion de multiples lignes en utilisant checkbox
    Par amine-pv0 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 20/12/2010, 05h15
  4. insertion avec multiples lignes
    Par f066457 dans le forum Langage SQL
    Réponses: 9
    Dernier message: 27/03/2006, 23h52

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