Précédent   Forum des professionnels en informatique > Bases de données > Oracle
Oracle Forum Oracle : le serveur, les outils, ... Voir F.A.Q Oracle Tutoriels 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 27/06/2007, 16h57   #1
Invité de passage
 
Inscription : avril 2007
Messages : 12
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 12
Points : 3
Points : 3
Par défaut forcer la mise en cache de 2 sous-requetes

Voila je rencontre un petit probleme sous oracle 9i.
Je fais une jointure entre les resultats de deux sous-requetes. effectuées séparements ces requetes ne posent pas de problemes et s'executent en quelques secondes et renvoient à peine une dizaine de lignes mais lorsque je les executent en tant que sous-requetes et que je fais la jointure entre les deux résultats, oracle mouline completement et fini par planter. est-il possible à oracle de lui preciser de mettre en cache les resultats des deux sous requetes puis de faire la jointure qu'apres la mise en cache ?
ashtur est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/06/2007, 17h09   #2
Membre Expert
 
Avatar de Garuda
 
Homme Philippe CHIRCOP
Chef de projet
Inscription : juin 2007
Messages : 1 109
Détails du profil
Informations personnelles :
Nom : Homme Philippe CHIRCOP
Localisation : France

Informations professionnelles :
Activité : Chef de projet
Secteur : Bâtiment

Informations forums :
Inscription : juin 2007
Messages : 1 109
Points : 1 559
Points : 1 559
Merci de donner le code de la requête !
__________________
Garuda गरूड
Brahmâ la Guerre et Vishnu la Paix

Oracle 10.2.0.4 - Forms6i patch 17 - Toad 11.1 - sharePoint 2010
Garuda est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/06/2007, 17h11   #3
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
c'est le jeu "on devine ta requête" c'est ça ?

j'mettrais bien un billet sur un UNION
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/06/2007, 17h17   #4
Invité de passage
 
Inscription : avril 2007
Messages : 12
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 12
Points : 3
Points : 3
si vous voulez mais je suis pas sur que ca vous apporte quelque chose.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
SELECT d.SG_HUB, d.FILE_NAME, c.NB_LINES
FROM
(SELECT SG_HUB, count(*) AS NB_LINES FROM ps_sg_feed_data
GROUP BY SG_HUB) c,
(SELECT SG_HUB, SG_INCOMING_NAME AS FILE_NAME
FROM PS_SG_INCOMING_FL A
WHERE A.SG_PROCESS_NAME = 'SGIBLOADER_CHECK'
AND A.SG_FILE_STATUS = 'S00'
AND A.DTTM_STAMP = (SELECT Max(DTTM_STAMP) FROM PS_SG_INCOMING_FL B
                    WHERE B.SG_PROCESS_NAME = 'SGIBLOADER_CHECK'
                    AND B.SG_HUB          = A.SG_HUB
                    AND B.SG_FILE_STATUS  = 'S00')) d
WHERE c.SG_HUB=D.SG_HUB
la premiere sous requete est :

Code :
1
2
SELECT SG_HUB, count(*) AS NB_LINES FROM ps_sg_feed_data
GROUP BY SG_HUB
la deuxieme sous-requete est :

Code :
1
2
3
4
5
6
7
8
SELECT SG_HUB, SG_INCOMING_NAME AS FILE_NAME
FROM PS_SG_INCOMING_FL A
WHERE A.SG_PROCESS_NAME = 'SGIBLOADER_CHECK'
AND A.SG_FILE_STATUS = 'S00'
AND A.DTTM_STAMP = (SELECT Max(DTTM_STAMP) FROM PS_SG_INCOMING_FL B
                    WHERE B.SG_PROCESS_NAME = 'SGIBLOADER_CHECK'
                    AND B.SG_HUB          = A.SG_HUB
                    AND B.SG_FILE_STATUS  = 'S00')
individuellement ces requetes s'executent sans probleme, tres rapidement et renvoient le meme nombre de lignes.
Le champs SG_HUB qui sert à faire la jointure finale est bien du meme format dans les deux requetes.
ashtur est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/06/2007, 17h28   #5
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
merci de penser aux balises CODE à l'avenir.

essaye de la réécrire avec la fonction analytique COUNT, du genre :

Code :
1
2
3
4
5
6
7
8
9
SELECT d.SG_HUB, SG_INCOMING_NAME AS FILE_NAME, count(*) OVER (PARTITION BY SG_HUB) AS NB_LIGNES
FROM PS_SG_INCOMING_FL A,ps_sg_feed_data c
WHERE c.SG_HUB=a.SG_HUB
AND A.SG_PROCESS_NAME = 'SGIBLOADER_CHECK'
AND A.SG_FILE_STATUS = 'S00'
AND A.DTTM_STAMP = (SELECT Max(DTTM_STAMP) FROM PS_SG_INCOMING_FL B
                    WHERE B.SG_PROCESS_NAME = 'SGIBLOADER_CHECK'
                    AND B.SG_HUB          = A.SG_HUB
                    AND B.SG_FILE_STATUS  = 'S00')
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/06/2007, 17h41   #6
Invité de passage
 
Inscription : avril 2007
Messages : 12
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 12
Points : 3
Points : 3
desolé pour les balises ;-)

Le code que tu m'as donné (apres quelques petites corrections pour qu'il tourne) produit les memes symptomes: moulinage puis plantage.
ashtur est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/06/2007, 17h45   #7
Membre Expert
 
Avatar de Garuda
 
Homme Philippe CHIRCOP
Chef de projet
Inscription : juin 2007
Messages : 1 109
Détails du profil
Informations personnelles :
Nom : Homme Philippe CHIRCOP
Localisation : France

Informations professionnelles :
Activité : Chef de projet
Secteur : Bâtiment

Informations forums :
Inscription : juin 2007
Messages : 1 109
Points : 1 559
Points : 1 559
Quelle erreur ORACLE ?
__________________
Garuda गरूड
Brahmâ la Guerre et Vishnu la Paix

Oracle 10.2.0.4 - Forms6i patch 17 - Toad 11.1 - sharePoint 2010
Garuda est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/06/2007, 17h45   #8
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
maintenant il nous faut les 3 plan d'exécutions
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/06/2007, 17h48   #9
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
et si tu remplaces :

Code :
1
2
3
4
5
6
7
8
SELECT SG_HUB, SG_INCOMING_NAME AS FILE_NAME
FROM PS_SG_INCOMING_FL A
WHERE A.SG_PROCESS_NAME = 'SGIBLOADER_CHECK'
AND A.SG_FILE_STATUS = 'S00'
AND A.DTTM_STAMP = (SELECT Max(DTTM_STAMP) FROM PS_SG_INCOMING_FL B
                    WHERE B.SG_PROCESS_NAME = 'SGIBLOADER_CHECK'
                    AND B.SG_HUB          = A.SG_HUB
                    AND B.SG_FILE_STATUS  = 'S00')) d
par :

Code :
1
2
3
4
5
SELECT SG_HUB, SG_INCOMING_NAME AS FILE_NAME, Max(DTTM_STAMP) 
   FROM PS_SG_INCOMING_FL A
  WHERE A.SG_PROCESS_NAME = 'SGIBLOADER_CHECK'
    AND A.SG_FILE_STATUS = 'S00'
GROUP BY sg_hub,SG_INCOMING_NAME
Un truc du genre :
Code :
1
2
3
4
5
6
SELECT SG_HUB, SG_INCOMING_NAME AS FILE_NAME, Max(DTTM_STAMP) , count(*) OVER (PARTITION BY SG_HUB) AS NB_LINES 
   FROM PS_SG_INCOMING_FL A,ps_sg_feed_data c
  WHERE A.SG_PROCESS_NAME = 'SGIBLOADER_CHECK'
    AND A.SG_FILE_STATUS = 'S00'
    AND A.SG_HUB=c.SG_HUB
GROUP BY sg_hub,SG_INCOMING_NAME
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/06/2007, 18h00   #10
Invité de passage
 
Inscription : avril 2007
Messages : 12
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 12
Points : 3
Points : 3
il n'y a pas d'erreur oracle, il plante (enfin TOAD plante et j'ai aussi essayé sous Decision Stream ca plante aussi)

Finalement, j'ai trouvé une requete qui marche :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
 
SELECT sg_hub, SG_INCOMING_NAME, (SELECT Count (*) FROM PS_SG_FEED_DATA E WHERE E.sg_hub = A.sg_hub GROUP BY E.sg_hub) NB_LINES
FROM PS_SG_INCOMING_FL A
WHERE
    A.SG_PROCESS_NAME = 'SGIBLOADER_CHECK'
AND A.SG_FILE_STATUS = 'S00'
AND A.DTTM_STAMP = (SELECT Max(DTTM_STAMP) FROM PS_SG_INCOMING_FL B
                    WHERE
                        B.SG_PROCESS_NAME = 'SGIBLOADER_CHECK'
                    AND B.SG_HUB          = A.SG_HUB
                    AND B.SG_FILE_STATUS  = 'S00')
AND SG_HUB <> 'PSG'
Allez savoir pourquoi ????

Orafrance, Les codes que tu m'a donné ne fournissent pas le bon resultat.

Merci pour votre aide
ashtur est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 16h43.


 
 
 
 
Partenaires

Hébergement Web