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

Oracle Discussion :

Vérification requête SQL


Sujet :

Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2011
    Messages : 74
    Par défaut Vérification requête SQL
    Bonjour,

    J'ai une requête sql, où je voudrais savoir si j'ai des erreurs ou non, enfin plutôt des erreurs de structures.
    Je vous demande cela, car quand je la rentre dans mon logiciel, il met plus de 30min à l'éxécuter, et affiche un résultat de plus de 500000lignes, ou il me dis pas assez de mémoire.

    Voici la requête:

    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    SELECT
    f.id_fam,
    p.tel_perso_per,
    a.adr_rue,
    a.adr_ville,
    a.adr_cp,
    al.id_all,
    m.situation_per,
    p.id_per,
    p.sexe_per,
    p.nom_per,
    p.prenom_per,
    p.date_naissance_per,
    il.code_lie,
    il.nom_lie,
    i.nom_act,
    '#Date début de période ../../....#' date_debut,
    '#Date fin de période ../../....#' date_fin,
    count(distinct date_rsv) nb_jours
    FROM
    cr_famille f,
    cr_personne p,
    cr_adresse a,
    cr_allocataire al,
    cr_inscription i,
    cr_inscription_lieu il,
    cr_inscription_presence ip,
    cr_membre_famille m
    WHERE
    i.id_fam = f.id_fam and
    i.id_per_ins = p.id_per and
    i.id_ins = il.id_ins and
    i.id_ins = ip.id_ins and
    -- Restrcition sur la période
    ip.date_rsv >= to_number(to_char(to_date('#Date début de période ../../....#'),'YYYYMMDD')) and
    ip.date_rsv <= to_number(to_char(to_date('#Date fin de période ../../....#'),'YYYYMMDD')) and
    lower(il.code_lie) = lower('#Libellé court du lieu :#') and
    --Que les présences
    ip.type_heure_rsv = 'P'
    GROUP BY
    f.id_fam,
    p.tel_perso_per,
    a.adr_rue,
    a.adr_ville,
    a.adr_cp,
    al.id_all,
    m.situation_per,
    p.id_per,
    p.sexe_per,
    p.nom_per,
    p.prenom_per,
    p.date_naissance_per,
    il.code_lie,
    il.nom_lie,
    i.nom_act

    Merci d'avance pour votre aide.

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Février 2007
    Messages
    260
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 260
    Par défaut
    Bonjour tifil,

    Essayez de formater votre code et d'utiliser les balises code ça sera plus facile à lire.

    A part ça je ne vois pas de jointure sur les tables adresse, allocataire, membrefamille.
    Ca veut dire que vous faites un produit cartésien sur ces tables ce qui démultiplie le résultat.
    Ca peut expliquer vos soucis.

    Pozzo

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2011
    Messages : 74
    Par défaut
    Pardon, pour le code, j'ai rectifié le tir.

    Quand vous dites, jointures sur ces 3 tables, pourquoi que ces 3 tables, et non les autres ?

  4. #4
    Membre Expert
    Inscrit en
    Août 2009
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 1 073
    Par défaut
    Il n'y a aucune restriction sur ces tables.
    On peut penser par exemple que l'adresse devrait être liée à la personne, que membre_famille doit être la table de jointure entre personne et famille, et que allocataire doit être liée à la personne et/ou à inscription.

    En écrivant vos requêtes en jointure ANSI, vous auriez pu détecter ce problème à la source !

  5. #5
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 135
    Par défaut
    En utilisant la notation normalisée depuis 20 ans pour les jointures, vous obtiendriez un code plus lisible et vous verriez immédiatement que les tables cr_adresse, cr_allocataire et cr_membre_famille ne sont liées à aucune autre table.
    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    SELECT  f.id_fam,
            p.tel_perso_per,
            a.adr_rue,
            a.adr_ville,
            a.adr_cp,
            al.id_all,
            m.situation_per,
            p.id_per,
            p.sexe_per,
            p.nom_per,
            p.prenom_per,
            p.date_naissance_per,
            il.code_lie,
            il.nom_lie,
            i.nom_act,
            '#Date début de période ../../....#' date_debut,
            '#Date fin de période ../../....#' date_fin,
            COUNT(DISTINCT date_rsv) nb_jours
    FROM    cr_inscription  i
        INNER JOIN
            cr_famille      f
            ON  i.id_fam = f.id_fam
        INNER JOIN
            cr_personne     p
            ON  i.id_per_ins = p.id_per
        INNER JOIN
            cr_inscription_lieu     il
            ON  i.id_ins = il.id_ins
        INNER JOIN
            cr_inscription_presence ip
            ON  i.id_ins = ip.id_ins
        ,   cr_adresse          a
        ,   cr_allocataire      al
        ,   cr_membre_famille   m
    WHERE   -- Restrcition sur la période
            ip.date_rsv >= to_number(to_char(to_date('#Date début de période ../../....#'),'YYYYMMDD'))
        AND ip.date_rsv <= to_number(to_char(to_date('#Date fin de période ../../....#'),'YYYYMMDD'))
        AND LOWER(il.code_lie) = lower('#Libellé court du lieu :#')
            --Que les présences
        AND ip.type_heure_rsv = 'P'
    GROUP BY
            f.id_fam,
            p.tel_perso_per,
            a.adr_rue,
            a.adr_ville,
            a.adr_cp,
            al.id_all,
            m.situation_per,
            p.id_per,
            p.sexe_per,
            p.nom_per,
            p.prenom_per,
            p.date_naissance_per,
            il.code_lie,
            il.nom_lie,
            i.nom_act
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  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
    En plus des remarques déjà relatées, quel est le type de la colonne cr_inscription_presence.date_rsv ?
    Un index existe-t-il sur cette colonne ?

  7. #7
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2011
    Messages : 74
    Par défaut
    Pour répondre à al1_24, j'ai rentré votre code, et malheureusement, il met toujours plus de 30minutes à éxécuter la requête.

    Pour Rei Ichido, je ne connais pas vraiment la jointure ANSI, je ne saurais donc le faire

    Pour Waldar, le type est NUMBER.

Discussions similaires

  1. Requête SQL
    Par Leludo dans le forum Langage SQL
    Réponses: 3
    Dernier message: 12/07/2024, 15h41
  2. [ DB2 ] [ AS400] requête sql
    Par zinaif dans le forum DB2
    Réponses: 6
    Dernier message: 23/08/2008, 19h42
  3. [VS2005]Vérification de la syntaxe d'une requête SQL
    Par gassisprog dans le forum Windows Forms
    Réponses: 2
    Dernier message: 22/04/2008, 08h45
  4. Utilisation de MAX dans une requête SQL
    Par Evil onE dans le forum Langage SQL
    Réponses: 7
    Dernier message: 15/06/2004, 18h38
  5. PB requète SQL avec Interbase
    Par missllyss dans le forum InterBase
    Réponses: 2
    Dernier message: 15/07/2003, 11h37

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