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 :

[PL / SQL] Besoin d'aide pour Optimisation


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé Avatar de shaun_the_sheep
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Octobre 2004
    Messages
    1 619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 619
    Par défaut [PL / SQL] Besoin d'aide pour Optimisation
    Bonjour,

    j'ai une tranche de début et fin de période et une durée exple: d: 2006 f:2010 D: 4 Je cherche une astuce pour generer une ligne par année en fction de ma durée

    quelqu'un a une idée ?

    Merci

  2. #2
    Membre Expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Par défaut
    En PL ? En SQL ?

  3. #3
    Rédactrice

    Avatar de kalyparker
    Femme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Janvier 2007
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 327
    Par défaut
    Bonjour,

    J'ai pas très bien compris ce que tu cherches à obtenir...
    1 lignes pour chaque année x durée ?
    It isn't that they can't see the solution, it's that they can't see the problem.
    Mes Articles et Traductions (Microstrategy, Css et Javascript)
    Si vous souhaitez contribuer à la rubrique BI, contactez-moi ou tout autre membre de l'équipe BI par MP.

  4. #4
    Membre éprouvé Avatar de shaun_the_sheep
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Octobre 2004
    Messages
    1 619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 619
    Par défaut
    je dirais en sql si c'est possible, sinon en pl/sql.

    pour faire simple j'ai un debut , une fin du durée dans une table et je dois avoir dans une autre table pour un individu une ligne par année (autant que ma durée)

  5. #5
    Membre Expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Par défaut
    Un truc comme ça ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SQL>select 2006 + rownum - 1
      2  from all_objects
      3  where rownum <= 2010-2006 + 1;
    2006+ROWNUM-1
    -------------
             2006
             2007
             2008
             2009
             2010

  6. #6
    Membre éprouvé Avatar de shaun_the_sheep
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Octobre 2004
    Messages
    1 619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 619
    Par défaut
    oui tout a fait, je n'y avais pas pensé, je part la dessus.

    Merci

  7. #7
    Membre éprouvé Avatar de shaun_the_sheep
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Octobre 2004
    Messages
    1 619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 619
    Par défaut
    Bon voici ce que j'ai fais, mais cela ne me parrait pas optimisé, quelqu'un peut il m'aider ?

    Merci
    CREATE OR REPLACE FORCE VIEW "REFERENTIEL"."LISTE_SESSION" ("EHP_UID", "VALEUR") AS
    Select EHP_UID,
    (CASE WHEN (INSTR(EHP_SESSION_DEBUT,'FACTURE')=1) THEN 'FACTURE'||(replace(EHP_SESSION_DEBUT,'FACTURE','') + rownum - 1)
    ELSE TO_CHAR(EHP_SESSION_DEBUT + rownum - 1)
    END) as valeur
    FROM ECHANGE_PROGRAMME,all_objects
    WHERE rownum <= replace(EHP_SESSION_FIN,'FACTURE','')-replace(EHP_SESSION_DEBUT,'FACTURE','') + 1
    and EHP_UID like '9F5F%'

  8. #8
    Membre Expert
    Inscrit en
    Avril 2006
    Messages
    1 024
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 1 024
    Par défaut
    Et si pour une fois on tentait de faire du propre....

    L'exemple que je donne fonctionne en 10g et 9i


    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
    create or replace type TNUM is table of number(10);
     
    Type created
     
    create or replace FUNCTION GEN_TAB (deb in number, fin in number)
       RETURN TNUM PIPELINED is
     BEGIN
       for f in deb..fin loop
         pipe row (f);
       end loop;
    END;
    /
     
    Function created
     
    select * from TABLE (GEN_TAB (2010,2016));
     
    COLUMN_VALUE
    ------------
            2010
            2011
            2012
            2013
            2014
            2015
            2016
    7 rows selected

  9. #9
    Membre éprouvé Avatar de shaun_the_sheep
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Octobre 2004
    Messages
    1 619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 619
    Par défaut
    je cherche une technique qui me permet de travailler avec une vue.

    je m'explique, le debut et fin est variable suivant chacun de mes individus de ma table.

    je peux avoir d=2004,f=2006 pour x puis d=2003,f=2007 pour y ect ..... ce qui devrait me donner pour x une ligne pour 2004,2005,2006 pour y une ligne pour 2003,2004,2005,2006,2007.

    Le
    select 2006 + rownum - 1
    FROM all_objects AO
    WHERE rownum <= 2010-2006 + 1;

    est une bonne base mais si je fais une jointure sur ma table pour remplacer les valeurs par mes entrées j'explose le temps d'exec. il me manque qqle chose.

    Merci

  10. #10
    Membre éprouvé Avatar de shaun_the_sheep
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Octobre 2004
    Messages
    1 619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 619
    Par défaut
    Bonjour,

    N'y aurait il pas une solution avec une requete SQL récursive ?

    Merci

  11. #11
    Membre Expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Par défaut
    Pour ne pas exploser les temps de réponses, il faut faire quelque chose comme cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select ...
    from maTable, (select 2006 + rownum - 1 annee
               FROM all_objects AO
               WHERE rownum <= 2010-2006 + 1) annees
    where ...
    Ainsi tu vas éviter un produit cartésien sur des milliers de lignes.

    Il est néanmoins vrai que cette méthode n'est d'une part pas satisfaisant pour les puristes et d'autre part pas sans incidence sur les temps de réponse. Si ton nombre d'années est limité, peut-être peux-tu attaquer une vue plus petite

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

Discussions similaires

  1. Besoin d'aide pour optimiser une petite query sql
    Par AsmCode dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 21/01/2009, 14h52
  2. Besoin d'aide pour optimiser du code
    Par scaleo dans le forum Langage
    Réponses: 1
    Dernier message: 07/01/2007, 13h56
  3. besoin d'aide pour optimiser une requête
    Par jisse dans le forum Langage SQL
    Réponses: 4
    Dernier message: 27/01/2006, 09h41
  4. Besoin d'aide pour optimiser requête SQL
    Par Keuf95 dans le forum Langage SQL
    Réponses: 10
    Dernier message: 06/09/2005, 16h02

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