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

SQL Oracle Discussion :

Demande aide requête SQL


Sujet :

SQL Oracle

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Juillet 2020
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2020
    Messages : 5
    Par défaut Demande aide requête SQL
    Bonjour,
    Je suis débutant SGBD. Sous Oracle SQL Developer j'essaie de compléter une table en une seule commande d'insertion et je suis confronté à l'erreur suivante:

    Erreur commençant à la ligne: 1 de la commande -
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    INSERT INTO client (PRENOM_ET_NOM_C, ADRESSE_C, CODE_POSTAL_C, VILLE_C, TELEPHONE_C, ADRESSE_MAIL_C)
     VALUES
    	('Jacques_Use','12_allee_verdun',6130,'grasse',2082050600,'jacques@laposte.net'),
    	('Jean_Fontaine','123_chemin_de_la_plage',12200,'paris',2082050601,'jean.fontaine@gmail.com'),
    	('Paul_Bocuse','52_rue_des_nouilles',13400,'strasbourg',2082050602,'vaillant06@voici.fr'),
    	('Astride_Vaillant','23_allee_de_la_montagne',99000,'nice',2082050603,'a.vaillant@youpi.fr'),
    	('Elise_Demichelis','2a_rue_des_roses',12000,'rouen',2082050604,'edemich@cestmoi.fr'),
    	('Marc_Gigogne','154_chemin_de_nul_part',67100,'toulouse',2082050605,'jeanne@arc.xyz'),
    	('Jeanne_Darc','99_route_du_retour',98002,'vitrolle',2082050606,'arc@arc.arc'),
    	('Michel_Vaillant','501_au_bou_du_monde',75011,'tucgneu',2082050607,'michel_vaillant@dis.dis'),
    	('Florent_Bousig','42_allee_des_cornailles',20400,'bilbao',2082050608,'flo.flo@flo.flo'),
    	('Max_Menace','17_allee_des_zazallees',12365,'bezier',2082050609,'m.m@m.m');
    Erreur à la ligne de commande: 3 Colonne: 82
    Rapport d'erreur -
    Erreur SQL : ORA-00933: la commande SQL ne se termine pas correctement
    00933. 00000 - "SQL command not properly ended"
    Les entêtes des colonnes de la table sont vérifiées et correctes.
    L'erreur se trouverait donc à la fin du premier groupe de données. Je ne comprends pas.
    Je vous remercie d'avance pour votre aide

  2. #2
    Membre Expert
    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Décembre 2019
    Messages
    1 176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Décembre 2019
    Messages : 1 176
    Par défaut
    Bonjour,

    Sous Oracle tu ne peux pas avoir plusieurs clauses VALUES pour un INSERT dans une seule table. Soit tu dupliques les INSERT INTO ....

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    INSERT INTO client (PRENOM_ET_NOM_C, ADRESSE_C, CODE_POSTAL_C, VILLE_C, TELEPHONE_C, ADRESSE_MAIL_C)
    VALUES ('Jacques_Use','12_allee_verdun',6130,'grasse',2082050600,'jacques@laposte.net');
     
    INSERT INTO client (PRENOM_ET_NOM_C, ADRESSE_C, CODE_POSTAL_C, VILLE_C, TELEPHONE_C, ADRESSE_MAIL_C)
    VALUES ('Jean_Fontaine','123_chemin_de_la_plage',12200,'paris',2082050601,'jean.fontaine@gmail.com');
    .....
    Soit tu utilises la pseudo-table DUAL avec des UNION ALL pour constituer tes lignes:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    INSERT INTO client (PRENOM_ET_NOM_C, ADRESSE_C, CODE_POSTAL_C, VILLE_C, TELEPHONE_C, ADRESSE_MAIL_C)
    SELECT 'Jacques_Use','12_allee_verdun',6130,'grasse',2082050600,'jacques@laposte.net' FROM DUAL
    UNION ALL
    SELECT 'Jean_Fontaine','123_chemin_de_la_plage',12200,'paris',2082050601,'jean.fontaine@gmail.com' FROM DUAL
    UNION ALL
    ....
    SELECT 'Max_Menace','17_allee_des_zazallees',12365,'bezier',2082050609,'m.m@m.m' FROM DUAL;

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Juillet 2020
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2020
    Messages : 5
    Par défaut Merci pour votre réponse.
    Merci beaucoup pour cette réponse parfaitement claire. Je vais adopter la première solution, beaucoup plus simple pour un débutant comme moi

  4. #4
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Il y a également l'astuce du insert all :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    insert all
        into client (PRENOM_ET_NOM_C, ADRESSE_C, CODE_POSTAL_C, VILLE_C, TELEPHONE_C, ADRESSE_MAIL_C) VALUES ('Jacques_Use','12_allee_verdun',6130,'grasse',2082050600,'jacques@laposte.net')
        into client (PRENOM_ET_NOM_C, ADRESSE_C, CODE_POSTAL_C, VILLE_C, TELEPHONE_C, ADRESSE_MAIL_C) VALUES ('Jean_Fontaine','123_chemin_de_la_plage',12200,'paris',2082050601,'jean.fontaine@gmail.com')
        into client (PRENOM_ET_NOM_C, ADRESSE_C, CODE_POSTAL_C, VILLE_C, TELEPHONE_C, ADRESSE_MAIL_C) VALUES ('Max_Menace','17_allee_des_zazallees',12365,'bezier',2082050609,'m.m@m.m')
    select * from dual;
    Ma solution "préférée" est la seconde proposée par vanagreg.

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Juillet 2020
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2020
    Messages : 5
    Par défaut
    Bonjour, merci pour cette seconde solution, Oracle ne délivre pas ses secrets facilement....

  6. #6
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 623
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 623
    Billets dans le blog
    10
    Par défaut
    Attention, la table est mal modélisée :
    - avoir les informations de l'adresse dans la table client est acceptable si et seulement si tout client a une et une seule adresse
    - idem pour le téléphone
    - une même colonne pour le nom et le prénom est une hérésie
    - idem pour l'adresse qui devrait être découpée en lignes adresse
    - le code postal et la ville auraient avantage à être externalisés

    En l'état, si vous recherchez tous vos clients qui résident à "Neung sur Beuvron", vous ne trouverez pas ceux dont la ville a été orthographiée "Neung-sur-Beuvron" ou encore "Neung s/s Beuvron"...
    Alors qu'un lien vers une table des villes vous affranchit de ce genre de soucis et fiabilise vos adresses

  7. #7
    Expert confirmé 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
    Par défaut
    C'est brut de fonderie mais ça a été amusant
    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
     
    SQL> truncate table client_2;
    Table truncated
     
    SQL> 
    SQL> insert into client_2
      2  With Data As (
      3  Select q'[('Jacques_Use','12_allee_verdun',6130,'grasse',2082050600,'jacques@laposte.net'),
      4  ('Jean_Fontaine','123_chemin_de_la_plage',12200,'paris',2082050601,'jean.fontaine@gmail.com'),
      5  ('Paul_Bocuse','52_rue_des_nouilles',13400,'strasbourg',2082050602,'vaillant06@voici.fr')]' AS txt
      6    from dual
      7  ), Ligne As (
      8  Select rownum as numlig,
      9         replace(replace(RegExp_SubStr(txt,'^\(.*$',1,occ,'m'),'('),'),') ligne
     10    from Data
     11    Cross Join
     12    (Select level as occ from dual connect by level <= 3)
     13  ),  Col As (
     14  Select numlig,
     15         nord,
     16         replace(replace(RegExp_SubStr(ligne,'[^,]*,?',1,nord),''''),',') val,
     17         ligne
     18    From Ligne
     19         Cross Join
     20    (Select level as nord from dual connect by level <= 6)
     21  ), lignepivot As (
     22  Select *
     23    from (
     24  Select numlig,
     25         nord,
     26         val
     27     from Col
     28     )
     29     pivot(Max(val) for nord In (1 as prenom,2 as adr, 3 as codp, 4 as ville,5 as tel,6 as mel) )
     30  )
     31  Select prenom, adr, codp, ville, tel, mel
     32    From lignepivot
     33  /
    3 rows inserted
     
    SQL> 
    SQL> Select *
      2    from client_2
      3  /
    PRENOM_ET_NOM_C                                                                  ADRESSE_C                                                                        CODE_POSTAL_C                                                                    VILLE_C                                                                          TELEPHONE_C                                                                      ADRESSE_MAIL_C
    -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- --------------------------------------------------------------------------------
    Jacques_Use                                                                      12_allee_verdun                                                                  6130                                                                             grasse                                                                           2082050600                                                                       jacques@laposte.net
    Jean_Fontaine                                                                    123_chemin_de_la_plage                                                           12200                                                                            paris                                                                            2082050601                                                                       jean.fontaine@gmail.com
    Paul_Bocuse                                                                      52_rue_des_nouilles                                                              13400                                                                            strasbourg                                                                       2082050602                                                                       vaillant06@voici.fr)
     
    SQL>

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 13/11/2007, 22h23
  2. Aide Requête SQL
    Par jjg65 dans le forum Langage SQL
    Réponses: 5
    Dernier message: 26/07/2007, 10h37
  3. Aide requête SQL - UPDATE phpmyadmin
    Par laulau37 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 20/06/2007, 10h19
  4. Aide requête sql
    Par viny dans le forum PostgreSQL
    Réponses: 18
    Dernier message: 14/09/2006, 21h31
  5. Aide Requête SQL (UPDATE)
    Par Glowprod dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 26/07/2006, 14h04

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