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

Langage SQL Discussion :

Requete qui ne rend pas la main sous TOAD


Sujet :

Langage SQL

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Février 2007
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 298
    Points : 85
    Points
    85
    Par défaut Requete qui ne rend pas la main sous TOAD
    Bonjour,

    j'ai une requete quand je l'execute sur TOAD comme un script :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    SELECT ca.co_id, ca.customer_id
     
            FROM pr_serv_status_hist psh,
     
                 contract_all ca
     
           WHERE psh.sncode =
     
                          (SELECT sncode
     
                             FROM mpusntab
     
                            WHERE shdes = 'Test')
     
             AND psh.histno =
     
                    (SELECT NVL (MAX (histno), 0)
     
                       FROM pr_serv_status_hist prs1
     
                      WHERE co_id = psh.co_id
     
                        AND sncode =
     
                               (SELECT sncode
     
                                  FROM mpusntab
     
                                 WHERE shdes = 'Test')           
                    )
     
             -- Ici mettre les bon status pour checker le service
             AND psh.status != 'O'
     
             AND psh.status IN ('A', 'S')
     
             AND psh.co_id = ca.co_id
    elle me rend pas la main elle s'excute durant des minutes sans sarreter et ça bloque TOAD,
    est ce que la requete est mal faite ? les jointures ne sont pas bien faites?

    Merci

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 782
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 782
    Points : 52 787
    Points
    52 787
    Billets dans le blog
    5
    Par défaut
    Essayez :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    WITH
    T0 AS
    (SELECT sncode
     FROM   mpusntab
     WHERE  shdes = 'Test'),
    T1 AS
    (SELECT co_id, NVL (MAX (histno), 0) AS MAX_histno
     FROM   pr_serv_status_hist AS prs1
            INNER JOIN T0 
                  ON prs1.sncode = T0.sncode
     GROUP  BY co_id)
    SELECT ca.co_id, ca.customer_id
    FROM   pr_serv_status_hist AS psh,
           INNER JOIN contract_all AS ca
                 ON psh.co_id = ca.co_id
           INNER JOIN T0
                 ON psh.sncode = T0.psh.sncode
           INNER JOIN T1
                 ON psh.histno = T1.MAX_histno
                    AND psh.co_id = T1.co_id
    WHERE  psh.STATUS != 'O'
      AND  psh.STATUS IN ('A', 'S');

    mais vous avez une jointure triangulaire, ce qui n'est pas bon et dénote en général une faute du modèle de données !

    Au passage votre requête s'écrit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    SELECT ca.co_id, ca.customer_id
    FROM   pr_serv_status_hist AS psh,
           INNER JOIN contract_all AS ca
                 ON psh.co_id = ca.co_id
    WHERE  psh.sncode = (SELECT sncode
                         FROM   mpusntab
                         WHERE  shdes = 'Test')
      AND  psh.histno = (SELECT NVL (MAX (histno), 0)
                         FROM   pr_serv_status_hist prs1
                         WHERE  co_id = psh.co_id
                           AND  sncode = (SELECT sncode
                                          FROM   mpusntab
                                          WHERE  shdes = 'Test'))
    -- Ici mettre les bon status pour checker le service
      AND  psh.STATUS != 'O'
      AND  psh.STATUS IN ('A', 'S');
    Les jointures JOIN existent depuis 1992 !!!!!!

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Février 2007
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 298
    Points : 85
    Points
    85
    Par défaut Erreur oracle : ORA-00933
    En executant la requete :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    SELECT ca.co_id, ca.customer_id
    FROM   pr_serv_status_hist AS psh,
           INNER JOIN contract_all AS ca
                 ON psh.co_id = ca.co_id
    WHERE  psh.sncode = (SELECT sncode
                         FROM   mpusntab
                         WHERE  shdes = 'Test')
      AND  psh.histno = (SELECT NVL (MAX (histno), 0)
                         FROM   pr_serv_status_hist prs1
                         WHERE  co_id = psh.co_id
                           AND  sncode = (SELECT sncode
                                          FROM   mpusntab
                                          WHERE  shdes = 'Test'))
    -- Ici mettre les bon status pour checker le service
      AND  psh.STATUS != 'O'
      AND  psh.STATUS IN ('A', 'S')
    j'ai l'erreur Oracle ORA-00933, je vois pas pourqoui...

    Merci

  4. #4
    Membre émérite Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Points : 2 845
    Points
    2 845
    Par défaut
    Salut !

    Tu as une virgule en trop : quand tu utilises la syntaxe de jointure "JOIN", tu ne dois pas mettre de virgules entre les noms de tables...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    FROM   pr_serv_status_hist AS psh,
           INNER JOIN contract_all AS ca
                 ON psh.co_id = ca.co_id

    (c'est ma photo)
    Paku, Paku !
    Pour les jeunes incultes : non, je ne suis pas un pokémon...

    Le pacblog : http://pacmann.over-blog.com/

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Exec : application qui ne rend pas la main
    Par Wilburdiskedur dans le forum Langage
    Réponses: 7
    Dernier message: 28/09/2011, 14h56
  2. Fonction php qui ne rend pas la main dans le SHELL
    Par diabli73 dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 20/10/2008, 19h45
  3. Thread Python qui ne rend pas la main
    Par Dazdh dans le forum Général Python
    Réponses: 2
    Dernier message: 15/07/2008, 12h11
  4. [Batch] make qui ne rend pas la main au batch
    Par Pierre.g dans le forum Scripts/Batch
    Réponses: 1
    Dernier message: 09/07/2008, 19h04
  5. Script CMD qui ne rend pas la main
    Par ipeteivince dans le forum Autres Logiciels
    Réponses: 2
    Dernier message: 10/06/2005, 11h00

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