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

PL/SQL Oracle Discussion :

fonction qui renvoie un cumul de durées


Sujet :

PL/SQL Oracle

  1. #1
    Membre régulier
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juillet 2006
    Messages
    188
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2006
    Messages : 188
    Points : 71
    Points
    71
    Par défaut fonction qui renvoie un cumul de durées
    Bonjour

    je cherche à faire une fonction PLSQL avec 3 parametres d'entree

    pcode,ddeb et dfin


    et 1 de sortie cumul

    ma tablestatus
    mes champs code,datestat,stat

    ma tablecodes
    mes champs code,libellé,type,categorie etc...


    pour un code donné pour une periode de reference donnée (entre ddeb et dfin)

    je veux la somme des durées d'arret



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select code,f(code,:ddeb,:dfin) durée_arret
    from tablecodes

    pour tous les codes de la tablecodes F(x) doit balayer la tablestatus et me ramener le cumul d'arret pour chaque code de la tablecodes pendant la periode definie dans les parametres 2 et 3 de la fonction


    exemple pour un code donné


    datestat,stat
    "01/01/2009 10:00", "arret"
    "01/01/2009 11:00" ,"marche"
    "01/01/2009 11:30","arret"
    "01/01/2009 12:30' ,marche"
    "01/01/2009 14:00","arret"
    "01/01/2009 15:30' ,marche"


    pour une periode comprise entre ddeb= 01/01/2009 10:00 et dfin= 01/01/2009 14:00

    f(code,:ddeb,:dfin)=120mn

    si dfin = 01/01/2009 15;00 alors

    f(code,:ddeb,:dfin) = 180mn

    comment ecrire cette fonction PLSQL f(x) ?

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations forums :
    Inscription : Mai 2008
    Messages : 75
    Points : 95
    Points
    95
    Par défaut
    moi j'ai essayé d'écrire une requete qui pourrait calculer le total des periodes d'arrêt.
    A toi de l'améliorer pour prendre en compte les dates début et fin.
    Code SQL : 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
     
    with t as
    (
    select to_date('01/01/2009 10:00','dd/mm/yyyy hh24:mi')as datestat,'arret'  as stat from dual 
    union
    select to_date('01/01/2009 11:00','dd/mm/yyyy hh24:mi'), 'marche' from dual 
    union
    select to_date('01/01/2009 11:30','dd/mm/yyyy hh24:mi'), 'arret'  from dual 
    union
    select to_date('01/01/2009 12:30','dd/mm/yyyy hh24:mi'), 'marche' from dual 
    union
    select to_date('01/01/2009 14:00','dd/mm/yyyy hh24:mi'), 'arret' from dual 
    union
    select to_date('01/01/2009 15:00','dd/mm/yyyy hh24:mi'), 'marche' from dual 
    )
    select sum(date_fin-date_deb)*1440 "CUMUL"
    from (
    select stat , datestat date_deb 
    , lead(datestat,1) over( order by datestat) date_fin
    from t)
    where stat='arret'
    and date_fin is not null
    /

  3. #3
    Membre régulier
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juillet 2006
    Messages
    188
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2006
    Messages : 188
    Points : 71
    Points
    71
    Par défaut
    merci je vais essayer cette syntaxe mais en oracle 8 i je ne connais pas lead ..over...

    c'est pour cela que je pensais le faire par une fonction PLSQL plutot qu'en pur SQL

  4. #4
    Membre expérimenté Avatar de fatsora
    Profil pro
    Inscrit en
    Février 2006
    Messages
    1 103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 1 103
    Points : 1 332
    Points
    1 332
    Par défaut
    Bonjour,

    S'il y a une fonction Oracle qui existe autant l'utiliser , sit tu peux faire en SQL fais le en SQL .(au lieu du PL , moins de code moins de bug !!)

    Il y a une doc ici sur les fonctions analytiques

    http://lalystar.developpez.com/fonctionsAnalytiques/

    asktom.oracle.com tahiti.oracle.com otn.oracle.com

    Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.


    phrase chinoise issue du Huainanzi

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

Discussions similaires

  1. Fonction qui renvoie un tableau?
    Par elm dans le forum C
    Réponses: 23
    Dernier message: 21/12/2005, 13h44
  2. Réponses: 31
    Dernier message: 25/10/2005, 19h26
  3. Fonction qui renvoie erreur dans mon état
    Par Daniel MOREAU dans le forum Access
    Réponses: 1
    Dernier message: 20/10/2005, 13h40
  4. [bioinfo] fonction qui renvoie chaîne à autre fonction
    Par perlaud dans le forum Bioinformatique
    Réponses: 11
    Dernier message: 16/07/2004, 16h06
  5. [VB6] Comment faire une fonction qui renvoie 2 résultats
    Par tazarine dans le forum VB 6 et antérieur
    Réponses: 10
    Dernier message: 15/01/2004, 01h13

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