Précédent   Forum des professionnels en informatique > Bases de données > Oracle > SQL
SQL Forum d'entraide sur le SQL pour Oracle
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 11/01/2012, 15h39   #1
Membre régulier
 
Homme Nicolas
Étudiant
Inscription : mai 2010
Messages : 309
Détails du profil
Informations personnelles :
Nom : Homme Nicolas
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mai 2010
Messages : 309
Points : 74
Points : 74
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 :
1
2
3
4
 
INSERT INTO ...
SELECT ...
FROM ...
la j'ai ce code la :

Code :
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 :
Citation:
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 :-)
feldi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2012, 15h44   #2
Membre Expert
 
Avatar de lola06
 
Femme Laure
Consultante en Business Intelligence
Inscription : avril 2007
Messages : 983
Détails du profil
Informations personnelles :
Nom : Femme Laure
Âge : 25
Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Consultante en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : avril 2007
Messages : 983
Points : 1 693
Points : 1 693
Bonjour,

Tu as inversé les noms des colonnes et VALUES.

La bonne syntaxe est :

Code :
1
2
INSERT INTO MaTable (MesColonnes)
VALUES SELECT ... FROM ...
__________________
~ Lola ~

Ne pas oublier :
et aussi :
lola06 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 11/01/2012, 15h51   #3
Membre régulier
 
Homme Nicolas
Étudiant
Inscription : mai 2010
Messages : 309
Détails du profil
Informations personnelles :
Nom : Homme Nicolas
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mai 2010
Messages : 309
Points : 74
Points : 74
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 ?
feldi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2012, 15h59   #4
Expert Confirmé
 
Homme
Inscription : mai 2002
Messages : 1 655
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2002
Messages : 1 655
Points : 2 657
Points : 2 657
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 !
punkoff est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 11/01/2012, 16h20   #5
Membre régulier
 
Homme Nicolas
Étudiant
Inscription : mai 2010
Messages : 309
Détails du profil
Informations personnelles :
Nom : Homme Nicolas
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mai 2010
Messages : 309
Points : 74
Points : 74
Merci pour les conseils !

J'ai modifié un petit peu en rajoutant le group by à la fin :
Code :
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
feldi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2012, 16h23   #6
Membre Expert
 
Avatar de lola06
 
Femme Laure
Consultante en Business Intelligence
Inscription : avril 2007
Messages : 983
Détails du profil
Informations personnelles :
Nom : Femme Laure
Âge : 25
Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Consultante en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : avril 2007
Messages : 983
Points : 1 693
Points : 1 693
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 ~

Ne pas oublier :
et aussi :
lola06 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 11/01/2012, 16h27   #7
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 686
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 686
Points : 10 435
Points : 10 435
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
On n'utilise VALUES que pour les insertions unitaires.
Donc pour vous :
Code :
1
2
INSERT INTO TABLE (colonnes)
SELECT ...
__________________
Email : http://scr.im/waldar
Waldar est actuellement connecté   Envoyer un message privé Réponse avec citation 20
Vieux 11/01/2012, 16h31   #8
Membre régulier
 
Homme Nicolas
Étudiant
Inscription : mai 2010
Messages : 309
Détails du profil
Informations personnelles :
Nom : Homme Nicolas
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mai 2010
Messages : 309
Points : 74
Points : 74
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.
feldi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2012, 16h36   #9
Membre Expert
 
Avatar de lola06
 
Femme Laure
Consultante en Business Intelligence
Inscription : avril 2007
Messages : 983
Détails du profil
Informations personnelles :
Nom : Femme Laure
Âge : 25
Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Consultante en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : avril 2007
Messages : 983
Points : 1 693
Points : 1 693
Code :
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 :
AND qvs.status_entity IN ('WON','OPEN')
__________________
~ Lola ~

Ne pas oublier :
et aussi :
lola06 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 11/01/2012, 16h43   #10
Membre régulier
 
Homme Nicolas
Étudiant
Inscription : mai 2010
Messages : 309
Détails du profil
Informations personnelles :
Nom : Homme Nicolas
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mai 2010
Messages : 309
Points : 74
Points : 74
Effectivement, tu as l'air d'avoir résolu (au moins en partie) mon problème !
Merci !
feldi est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 22h56.


 
 
 
 
Partenaires

Hébergement Web