Bonjour,

Je recherche dans l'historique d'Oracle les ordres SQL qui ont plusieurs plans d'exécution.
Voici un ordre SQL qui fait une partie du boulot : on a la liste des plans d'exécution par SQL_ID MAIS je n'arrive pas à filtrer pour ne garder que ceux avec plusieurs plans... j'ai presque honte mais je tourne en rond

Dans cet exemple, je ne veux garder que 013ahmhabwmpb qui a plus de un plan et éliminer les autres ordres.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
select distinct sql_id, PLAN_HASH_VALUE
from DBA_HIST_SQLSTAT
order by 1, 2

SQL_ID	PLAN_HASH_VALUE
000vk52kccdvy	4230225855
00ysnfhmv9mnm	3872546376
013ahmhabwmpb	171374565
013ahmhabwmpb	2065209786
013ahmhabwmpb	2353834437
013ahmhabwmpb	2657421675
013ahmhabwmpb	2778075918

013tgmc6jgwff	3916544610


Bon ben finalement j'ai trouvé la solution
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
select sql_id, count(*)
from DBA_HIST_SQLSTAT
group by sql_id
having count(*) > 1
order by count(*), sql_id
 
SQL_ID	COUNT(*)
013ahmhabwmpb	5