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 :

Insert depuis plusieurs tables - ORA-00933


Sujet :

SQL Oracle

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2010
    Messages
    347
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2010
    Messages : 347
    Points : 121
    Points
    121
    Par défaut Insert depuis plusieurs tables - ORA-00933
    Bonjour,

    je dois réaliser un programme qui demande en premier lieu de créer et remplir une nouvelle table avec les informations venant de plusieurs autres tables.
    J'ai un peu cherché pour la requête et la formule générale semble être :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    insert into ...
    select ...
    from ...
    la j'ai ce code la :

    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
     
    insert into essai values (dateAffaire, nomRepresentant, totalAffaires, nbAffaires, totalDevis, nbDevis, totalCommandes, nbCommandes, nbVisites, nbRelances)
    select qvs.date_status_entity, acm.id_contact, sum(qvs.total_price_list + ovs.quoted_amount), 0, sum(qvs.total_price_list), count(qvs.total_price_list), sum(ovs.quoted_amount), count(ovs.quoted_amount), 0, 0
     
    from  ... ovs,
            ... acm,
            (select id_entity, short_text1, short_text2
             from ...
             where id_class = 'oppUps' and num_array = 0 and num_line = 0) ocl,
            (select id_entity, short_text1
             from ...
             where id_class = 'oppCom' and num_array = 0 and num_line = 0) oclc,
            ... qvs,
            (select id_entity, short_text1, medium_text1
             from ...
             where id_class = 'quoUps' and num_array = 0 and num_line = 0) qcl,
            ... ctvs
            where (qvs.flag_is_to_forecast=1 or qvs.flag_is_to_forecast=0) 
                and qvs.status_entity='WON' 
                and qvs.status_entity='OPEN'
                and qvs.id_opportunity = ovs.id_opportunity
                and idCompte = qcl.Medium_text1
                and qcl.id_entity = qvs.id_quote
                and ctvs.date_status_entity = qvs.date_status_entity;
    et j'obtiens un message d'erreur :
    ORA-00933: la commande SQL ne se termine pas correctement
    ça fonctionne d'une autre manière pour un insert venant de plusieurs tables différentes ?
    La structure générale du système d'information est tellement anarchique que je ne peux pas la représenter pour vous aider plus :/

    Merci pour votre aide :-)

  2. #2
    Membre émérite Avatar de lola06
    Femme Profil pro
    Consultante en Business Intelligence
    Inscrit en
    Avril 2007
    Messages
    1 316
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultante en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 316
    Points : 2 520
    Points
    2 520
    Par défaut
    Bonjour,

    Tu as inversé les noms des colonnes et VALUES.

    La bonne syntaxe est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    INSERT INTO MaTable (MesColonnes)
    VALUES SELECT ... FROM ...
    ~ Lola ~

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2010
    Messages
    347
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2010
    Messages : 347
    Points : 121
    Points
    121
    Par défaut
    Ah oui exact

    Mais j'ai toujours le même message d'erreur après modification. On peut rajouter des conditions comme je l'ai fait dans ce type d'insert ?

  4. #4
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    Bonjour,

    vous utilisez des sum / count sans group by, pour moi c'est pas bon.

    votre requete select seule marche en l'état ?

    De plus cette requête est pleine de produit cartésien car vous ne faites pas de jointure.
    Est-ce voulu ?

    Bref revoyez la base de cette requête select avant de vouloir faire un insert avec car j'ai peur du résultat !

  5. #5
    Membre régulier
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2010
    Messages
    347
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2010
    Messages : 347
    Points : 121
    Points
    121
    Par défaut
    Merci pour les conseils !

    J'ai modifié un petit peu en rajoutant le group by à la fin :
    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
     
    insert into essai (dateAffaire, nomRepresentant, totalAffaires, nbAffaires, totalDevis, nbDevis, totalCommandes, nbCommandes, nbVisites, nbRelances)
    values select qvs.date_status_entity, 
                acm.id_contact, 
                sum(qvs.total_price_list + ovs.quoted_amount) as sommeAffaire, 
                0, 
                sum(qvs.total_price_list) as sommeDevis, 
                count(qvs.total_price_list) as nbDevis, 
                sum(ovs.quoted_amount) as sommeCommande, 
                count(ovs.quoted_amount) as nbCommande, 
                0, 
                0
            from ... ovs,
                 ... acm,
                 (select id_entity, short_text1, short_text2
                     from ...
                     where id_class = 'oppUps' and num_array = 0 and num_line = 0) ocl,
                 (select id_entity, short_text1
                     from ...
                     where id_class = 'oppCom' and num_array = 0 and num_line = 0) oclc,
                 ... qvs,
                 (select id_entity, short_text1, medium_text1
                     from ...
                     where id_class = 'quoUps' and num_array = 0 and num_line = 0) qcl,
                 (select id_entity, short_text10
                     from ...
                     where id_class = 'accInfCom' and num_array = 0 and num_line = 0) accl,
                 ... ctvs
                 where (qvs.flag_is_to_forecast=1 or qvs.flag_is_to_forecast=0) 
                 and qvs.status_entity='WON' 
                 and qvs.status_entity='OPEN'
                 and qvs.id_opportunity = ovs.id_opportunity
                 and qcl.id_entity = qvs.id_quote
                 and ctvs.date_status_entity = qvs.date_status_entity
                 and ovs.id_opportunity = ocl.id_opportunity
                 and qcl.medium_text1 = accl.id_account
                 GROUP BY sommeAffaire, 
                    sommeDevis, 
                    nbDevis, 
                    sommeCommande, 
                    nbCommande;
    Par contre j'ai toujours le même message.
    Pour ce qui est des produits cartésiens à la place des jointures, je comprends ton étonnement.
    On va dire que pour l'instant j'aimerais déjà que ça fonctionne pour tester ensuite et ajuster si besoin est (j'en ai ajouté, normalement elles y sont toutes). Néanmoins, même si je ne mettais pas de jointures, il ne devrait pas y avoir ce message d'erreur il me semble ?

    Merci

  6. #6
    Membre émérite Avatar de lola06
    Femme Profil pro
    Consultante en Business Intelligence
    Inscrit en
    Avril 2007
    Messages
    1 316
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultante en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 316
    Points : 2 520
    Points
    2 520
    Par défaut
    Dans le group by tu t'es trompé, il ne faut indiquer que les colonnes qui ne font pas l'objet d'un count/sum/max... Soit l'inverse de ce que tu as fait.

    Est-ce que la requête fonctionne sans le INSERT ?
    ~ Lola ~

  7. #7
    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
    On n'utilise VALUES que pour les insertions unitaires.
    Donc pour vous :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    INSERT INTO Table (colonnes)
    SELECT ...

  8. #8
    Membre régulier
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2010
    Messages
    347
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2010
    Messages : 347
    Points : 121
    Points
    121
    Par défaut
    Edit : Merci Laura, j'avais pas remarquer ça en regardant des exemples.

    Après quelques petites modifs, le select "normal" fonctionne mais retourne 0 lignes.
    Je dois donc avoir un problème sur les conditions de jointure, je vais regarder ça à l'occasion.

    Je laisse le sujet en l'état, je le mettrais résolu quand j'aurais réussi à ramener des lignes.

    Merci à vous 2.


    Edit @Waldar : effectivement, sans le values je n'ai plus d'erreurs. Bon, ça ne ramène toujours pas de lignes mais c'est un bon début.
    Merci à toi aussi.

  9. #9
    Membre émérite Avatar de lola06
    Femme Profil pro
    Consultante en Business Intelligence
    Inscrit en
    Avril 2007
    Messages
    1 316
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultante en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 316
    Points : 2 520
    Points
    2 520
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    and qvs.status_entity='WON' 
     and qvs.status_entity='OPEN'
    Ton erreur pourrait peut-être venir de là ? Tu demande à une colonne d'être égale aux deux valeurs.

    Remplace par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    and qvs.status_entity IN ('WON','OPEN')
    ~ Lola ~

  10. #10
    Membre régulier
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2010
    Messages
    347
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2010
    Messages : 347
    Points : 121
    Points
    121
    Par défaut
    Effectivement, tu as l'air d'avoir résolu (au moins en partie) mon problème !
    Merci !

Discussions similaires

  1. INSERT INTO (plusieurs tables)
    Par ghis33 dans le forum Langage SQL
    Réponses: 9
    Dernier message: 25/08/2009, 16h15
  2. INSERT sur plusieurs tables.
    Par Nethervoid21 dans le forum SQL Procédural
    Réponses: 7
    Dernier message: 18/11/2006, 11h22
  3. Insertion dans plusieurs tables : Transaction ?
    Par Invité dans le forum Requêtes
    Réponses: 2
    Dernier message: 05/07/2006, 18h25
  4. Requête : Insert avec plusieurs tables
    Par bleu_ciel dans le forum Access
    Réponses: 4
    Dernier message: 01/06/2006, 21h42
  5. INSERT sur plusieurs tables
    Par juniorAl dans le forum Langage SQL
    Réponses: 4
    Dernier message: 30/03/2005, 18h59

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