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 :

PL/SQL Recherche liste [10gR2]


Sujet :

PL/SQL Oracle

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Juillet 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juillet 2013
    Messages : 8
    Points : 7
    Points
    7
    Par défaut PL/SQL Recherche liste
    Bonjour chers tous,

    J'aurai besoin de votre aide précieuse.
    Alors je travaille sur une requete SQL oracle.
    Mais dans ma requete, j'aimerai avoir appeler une fonction qui, pour une date de commande donnée (cmde dans laquelle cet article figure), consulte l'historique (retournée ici par la sous requête Histo) et me retourne qui était le fournisseur pour cet article à l'époque de la commande. Ceci, en se servant des dates de début de validité des fournisseurs. On sous-entend qu'à tout moment il y a un seul founisseur valide. Quand on active un nouveau fournisseur, l'"ancien" founisseur est désactivé.

    Voici le retour de la sous requete Histo:

    Article Fournisseur Date validité
    Renault 900446 24/03/2009 10:23
    Renault 900726 8/02/2010 12:26
    Renault 900446 22/02/2010 14:47
    Renault 900726 30/04/2010 14:38
    Renault 900726 23/03/2011 15:51
    Renault 905141 7/11/2011 11:36
    Renault 900446 17/07/2013 16:24


    L'idée serait alors de se servir du résultat de ma fonction pour remplir la colonne "Fournisseur" de ma requete (tel que ci-dessous)
    Cmde Article Date cmde Fournisseur
    1102 Renault 25/03/2010 12:51 900446
    3103 Renault 18/04/2011 16:26 900726

    Autrement dit, la commande 1102 de l'article Renault a été passée à la date 25/03/2010 12:51. En consultant le 1er query on constate qu' entre le 22/02/2010 14:47 et le 30/04/2010 14:38, le fournisseur valide était 900446.
    ...

    A mon sens ca se rapporte à faire une sorte de recherche dichotomique en PLSQL. Mais pour le faire je me suis lancé dans les curseurs et je crains que je me perds un peu là.

    Si vous pouviez m'aider, j'en serai bien heureux...

    Espérant avoir assez bien formulé ma demande,
    Cordialement

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Pouvez-vous publier la structure de votre table histo ?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    500
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 500
    Points : 639
    Points
    639
    Par défaut
    Je pense que vous pouvez résoudre ça avec la fonction analytique LEAD(), de la manière suivante (non testé) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SELECT ARTICLE, FOURNISSEUR,
               DATE_VALIDITE AS DATE_DEBUT,
               NVL(LEAD(DATE_VALIDITE) OVER(ORDER BY DATE_VALIDITE), TO_DATE('31/12/9999', 'DD/MM/YYYY')) AS DATE_FIN
    FROM
    (
       < REQUETE_HISTO >
    )
    Il faudrait ensuite inclure cette requête dans la requête d'alimentation de la colonne Fournisseur en critérisant sur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    DATE_CMDE >= DATE_DEBUT AND DATE_CMDE < DATE_FIN
    En espérant t'avoir aidé.
    Des chercheurs qui cherchent, on en trouve, mais des chercheurs qui trouvent, on en cherche !

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Juillet 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juillet 2013
    Messages : 8
    Points : 7
    Points
    7
    Par défaut
    Bonjour
    et Merci d'avoir pris le temps de me répondre.

    @Waldar, je doute que la structure de la table historique soit nécessaire. C'est une table très large et qui contient del'historique de différents domaines. J'ai donc ici exhibé dans un sous query les données qui m'interesseraient. Je comptais accéder à la table historique via un sous select tel que le fait dgi77.

    @dgi77, Merci pour ta proposition.
    Je ne connaissais pas la fonction LEAD.
    Je vais essayer dans l'heure et vous dire ce que ça me donne.

    Merci encore...

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Juillet 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juillet 2013
    Messages : 8
    Points : 7
    Points
    7
    Par défaut
    Plus que Excellent!!!
    Merci dgi77. Je sais maintenant que les genies ça existe.
    Whaouu... Dire que j'y ai passé 2 heures.

    J'aimerai bien avoir un tuto pour les nuls pour maitriser les fonctions analytiques.
    Elles sont très puissantes je trouve.

    Merci encore pour votre aide les amis. Maintenant que je sais comment procéder, je vais prendre le temps d'ecrire une fonction plus générique pour le faire.

    Thank's a lot...

  6. #6
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Citation Envoyé par pataw Voir le message
    @Waldar, je doute que la structure de la table historique soit nécessaire. C'est une table très large et qui contient de l'historique de différents domaines. J'ai donc ici exhibé dans un sous query les données qui m’intéresseraient. Je comptais accéder à la table historique via un sous select tel que le fait dgi77.
    J'allais vous proposer de créer une vue sur votre table d'historique, enfin vous pouvez la compléter des autres colonnes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    CREATE OR REPLACE VIEW v_Histo (ARTICLE, FOURNISSEUR, DATE_DEBUT, DATE_FIN)
    AS
    SELECT ARTICLE
         , FOURNISSEUR
         , DATE_VALIDITE
         , LEAD(DATE_VALIDITE - numtodsinterval(1, 'second'), 1, date '9999-12-31') OVER(partition by ARTICLE ORDER BY DATE_VALIDITE)
      FROM <table_histo>;
    La jointure se fait ensuite avec un BETWEEN.

    Pour les fonctions analytiques, il y a des tutoriels sur le site :

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

Discussions similaires

  1. [SQL] Recherche multicritères genération de la requête
    Par primus dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 23/02/2006, 16h34
  2. [Sql] recherche un Editeur Freeware ?
    Par cladsam dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 08/02/2006, 17h54
  3. [PostGre SQL] Recherche sur un champs
    Par Cyberbob002 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 10/01/2006, 11h57
  4. [SQL]recherche Script si FK on un index
    Par patmaba dans le forum Oracle
    Réponses: 2
    Dernier message: 18/10/2005, 10h14
  5. SQL 2000 - Liste + taille des tables et index
    Par Fox dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 12/03/2004, 15h59

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