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 :

Problème avec une requête


Sujet :

SQL Oracle

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 21
    Par défaut Problème avec une requête
    Bonjour,

    J'ai un select comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT 
            t.tablespace_name "Tablespace",  
            sum(decode(maxsize,0,filesize,maxsize)) "Max size MB", 
            sum(decode((filesize - free),null,maxsize,(filesize - free))) "Used MB", 
            sum(decode(maxsize,0,filesize,maxsize)) - sum(decode((filesize - free),null,maxsize,(filesize - free))) "Free MB",
            round((sum(decode((filesize - free),null,maxsize,(filesize - free))) * 100) / sum(decode(maxsize,0,filesize,maxsize)),2) "PCT Used MB"
    et j'aimerais utilisé la 5e ligne du select dans un where pour ressortir les PCT > 80.

    Malheureusement, je ne peux pas faire un copier/coller de cette ligne dans le where. Y a-t-il un autre moyen d'utilise la 5e ligne du select dans mon where?

    Merci!

  2. #2
    Scorpi0
    Invité(e)
    Par défaut
    Bonjour,

    Malheureusement, je ne peux pas faire un copier/coller de cette ligne dans le where.
    Pourquoi donc ?

  3. #3
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    regarde du coté de HAVING

    Sinon, tout simplement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT * FROM 
    (SELECT 
            t.tablespace_name "Tablespace",  
            sum(decode(maxsize,0,filesize,maxsize)) "Max size MB", 
            sum(decode((filesize - free),NULL,maxsize,(filesize - free))) "Used MB", 
            sum(decode(maxsize,0,filesize,maxsize)) - sum(decode((filesize - free),NULL,maxsize,(filesize - free))) "Free MB",
            round((sum(decode((filesize - free),NULL,maxsize,(filesize - free))) * 100)  sum(decode(maxsize,0,filesize,maxsize)),2) PCT_USED ...)
    WHERE PCT_USED > 80;

  4. #4
    Scorpi0
    Invité(e)
    Par défaut
    D'ailleurs orafrance, peut-être pourra tu éclairer ma lanterne :

    Pourquoi le sql, voir Oracle, ne nous autorise pas à utiliser les alias de colonne dans les clauses Where ?
    Je ne vois pas de raison technique ni logique à pouvoir le faire, mais j'imagine qu'il doit y en avoir une !

  5. #5
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    Ca pourrait être une évolution (SQL Server le peux il me semble) mais probablement que l'alias est considéré comme étant une possibilité offerte pour la "cosmétique" du résultat, sans valeur fonctionnelle, du coup c'est pas pris en compte par le parseur. Sauf dans le cas d'une sous-requête puisqu'elle est considéré comme une vue et dans ce cas, l'alias permet de reconnaitre la colonne

    Enfin... j'imagine parce que j'suis pas dév chez Oracle alors je ne peux rien affirmer

  6. #6
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Je n'ai pas de source pour ce qui va suivre, j'ai du le lire quelque part et le retranscrire avec la logique, ça reste à vérifier aussi ne le prenez pas pour référence.

    Je pense que l'interpréteur SQL traite d'abord les instructions du FROM, puis du WHERE, puis du SELECT (avec ou sans GROUP BY), puis du HAVING (si GROUP BY donc), puis les ORDER / fonctions de fenêtrages.
    J'ai un (petit) doute sur le DISTINCT mais je le positionnerai bien en bon dernier.


    Enfin bref, tout ça pour dire qu'au moment de traiter le Where, il ne connait pas encore les colonnes qu'il va afficher / calculer.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 21
    Par défaut
    Bonjour,

    Désolé pour le délai de ma réponse !!
    Ce n'était pas voulu.

    Effectivement, j'ai utilisé la clause HAVING. Mais je viens de lire la réponse d'orafrance et je me demande laquel est la plus optimal côté exécution?
    Je vais surement allé de ce côté de toute façon. Plus de latitude pour le PCT_USED que je recherche.

    Et Scorpi0, je suis d'accord avec toi, cela serait utile d'avoir les alias de colonne dans le where

  8. #8
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    207
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 207
    Par défaut
    Bonjour,

    Si tu utilise une version oracle 10g, tu peux utiliser la vue DBA_TABLESPACE_USAGE_METRICS
    Du coup tu as tout de suite le pourcentage.

    Laurent

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 21
    Par défaut
    Bonjour Laurent,

    Merci pour l'information.
    Malheureusement, j'ai des clients sous 8i, 9i, 10g et 11i.

    Merci!

    Felix

  10. #10
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2007
    Messages : 149
    Par défaut
    Citation Envoyé par Scorpi0 Voir le message
    D'ailleurs orafrance, peut-être pourra tu éclairer ma lanterne :

    Pourquoi le sql, voir Oracle, ne nous autorise pas à utiliser les alias de colonne dans les clauses Where ?
    Je ne vois pas de raison technique ni logique à pouvoir le faire, mais j'imagine qu'il doit y en avoir une !
    On risque pas d'avoir une condition qui dépend d'un résultat résultant d'une condition (etc ...)?

    Je pense direct à un problème comme ça (simplifié ici) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    select age + 1 as newage
        from personne
        where age < newage

Discussions similaires

  1. [TADOQuery] Problème avec une requête
    Par yannba dans le forum Bases de données
    Réponses: 2
    Dernier message: 20/01/2006, 13h51
  2. Problème avec une requête
    Par demonark dans le forum Langage SQL
    Réponses: 3
    Dernier message: 19/09/2005, 05h35
  3. Problème avec une requête
    Par ringostarr dans le forum Langage SQL
    Réponses: 5
    Dernier message: 19/04/2005, 20h34
  4. Problème avec une requête
    Par snoopy69 dans le forum Débuter
    Réponses: 2
    Dernier message: 20/01/2005, 12h39
  5. problème avec une requête imbriquée
    Par jaimepasteevy dans le forum Langage SQL
    Réponses: 13
    Dernier message: 05/12/2003, 10h29

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