Bonjour,
Nous rencontrons en ce moment un comportement étrange sur notre base Oracle.
Le contexte physique :
- Base Oracle 10gR2 (10.2.0.1)
- Serveur Win2003
Une de nos requêtes utilise les fonctions hiérarchiques sur une table partitionnée.
Jusqu'ici tout va bien. Or, cette requête nous ramène des résultats complètement incohérents en fonction des colonnes choisies dans le select!
Voici un exemple parlant, identique à ce que l'on a dans notre cas. Dans notre table, nous n'avons qu'une ligne (données de test):
1 2 3 4 5 6 7 8 9 10 11
|
select
code,
libelle,
libelle_long
from
table_code
where
trunc(date_codif) = trunc(sysdate) -- Notre clé de partitionnement (une partition par jour)
start with code_parent is null
connect by code_parent = prior code; |
=> Retour de la requête : rien du tout! 
Nous changeons la requête et excluons la colonne libelle_long (et spécifiquement celle-ci!):
1 2 3 4 5 6 7 8 9 10 11
|
select
code,
libelle --,
-- libelle_long -- Nous excluons ce champ
from
table_code
where
trunc(date_codif) = trunc(sysdate) -- Notre clé de partitionnement (une partition par jour)
start with code_parent is null
connect by code_parent = prior code; |
=> Retour de la requête : Notre ligne de tests! 
Pour résumer : nous avons un cas, où, alors que nous n'avons pas de fonction d'agrégation ou autre, le choix des colonnes dans le sélect influe sur le résultat.
Là où c'est encore plus cocasse, c'est que lorsque nous englobons ces deux requêtes pour en obtenir le nombre de lignes:
select count(*) from (requete)
Nous obtenons 1 ligne comptée dans les deux cas. 
Quelqu'un aurait une piste?
D'avance, merci
Partager