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 :

Curseur à mettre en place


Sujet :

Langage SQL

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mai 2007
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 72
    Points : 37
    Points
    37
    Par défaut Curseur à mettre en place
    Bonjour,

    Nous avons une table composé des RIb , code événement et date d’événement

    Nous souhaitons sélectionner et purger les comptes ayant leur dernier
    code événement à 'AA' et la date d’événementNom : Cursor.png
Affichages : 171
Taille : 8,0 Ko > 1 année

    Comme indiqué dans la table PJ

    Avez-vous une idée sur le curseur à mettre en place ?

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 106
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    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 106
    Points : 28 394
    Points
    28 394
    Par défaut
    Quelle requête as-tu déjà essayée ?
    Quel problème rencontres-tu ?

  3. #3
    Nouveau membre du Club
    Inscrit en
    Mai 2007
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 72
    Points : 37
    Points
    37
    Par défaut
    Bonjour,

    Pour Moi la curseur à mettre en place est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT *
    FROM IRRPROD.TBACTIRR
    ORDER BY D_EVENT DESC;
    Mais ça va charger tout la table ce qui engendre une consommation mémoire important.

  4. #4
    Membre éclairé Avatar de GeekMokona
    Femme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Novembre 2011
    Messages
    327
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2011
    Messages : 327
    Points : 817
    Points
    817
    Par défaut
    Quel est Ton SGBD ?

    Car un curseur n'est pas la meilleur des solutions travaille ligne a ligne et non ensembliste ....

    En fonction de ton SGBD il existe des méthode autre comme les CTE ou les fonction OLAP Max(Date) Over(Partition By ....

  5. #5
    Nouveau membre du Club
    Inscrit en
    Mai 2007
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 72
    Points : 37
    Points
    37
    Par défaut
    C'est du DB2.

    Nous codons du COBOL sous DB2

    En d'autres terme, y a t-il des fonction prédéfinis qui me permet de récupérer les lignes dont la date d’événement est > 1 année ?

    Merci d'avance.

  6. #6
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 338
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 338
    Points : 39 738
    Points
    39 738
    Billets dans le blog
    9
    Par défaut
    Pour ce cas d'espèce, un test d'existence suffit :

    Recherche pour le même RIB, d'un enregistrement plus récent en statut 'AC' s'il n'y en a pas, on supprime
    A vous d'alimenter la host-variable HV-DATE avec la date qui va bien, que vous pouvez si besoin calculer par rapport à la current-date

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    DELETE FROM MA_TABLE MAIN
    WHERE D-EVENT < :HV-DATE
      AND NOT EXISTS
         (SELECT 1 FROM MA_TABLE SUBQ
          WHERE SUBQ.RIB = MAIN.RIB
            AND SUBQ.D-EVENT > MAIN.D-EVENT
            AND SUBQ.C-EVENT = 'AC')
    Si votre date D-EVENT de format DATE vous pouvez calculer comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    DELETE FROM MA_TABLE MAIN
    WHERE D-EVENT < ADD_MONTHS(CURRENT_DATE, -12) 
      AND NOT EXISTS
         (SELECT 1 FROM MA_TABLE SUBQ
          WHERE SUBQ.RIB = MAIN.RIB
            AND SUBQ.D-EVENT > MAIN.D-EVENT
            AND SUBQ.C-EVENT = 'AC')
    Si votre date est au format TIMESTAMP, il faut remplacer par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ADD_MONTHS(DATE(CURRENT TIMESTAMP),-12)
    Edit : cela étant, notez bien qu'en général on ne code pas de requete, surtout pour du delete, en utilisant des registres comme current date ou current timestamp.
    car ce type d'utilisation empêche de lancer le traitement en mode reprise et peut provoquer des incohérences s'il démarre le soir et se termine après minuit.
    Le plus souvent, les responsables de prod imposent l'utilisation d'une date pilotée par le robot d'exploitation

  7. #7
    Nouveau membre du Club
    Inscrit en
    Mai 2007
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 72
    Points : 37
    Points
    37
    Par défaut
    Merci escartefigue pour cette réponse.
    Je crois qu'elle est valable au cas ou nous avons que 2 code d'evenements 'AA' ou 'AC', par contre nous avons 3 événements.
    Avez-vous une idée svp ?

  8. #8
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 338
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 338
    Points : 39 738
    Points
    39 738
    Billets dans le blog
    9
    Par défaut
    Si vous avez plusieurs codes événement à prendre en compte, il suffit d'adapter la sous-requête imbriquée, par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
         (SELECT 1 FROM MA_TABLE SUBQ
          WHERE SUBQ.RIB = MAIN.RIB
            AND SUBQ.D-EVENT > MAIN.D-EVENT
            AND SUBQ.C-EVENT IN  ('AC', 'XX', 'YY' etc...))

Discussions similaires

  1. mettre en place un réseau wifi
    Par Le Pharaon dans le forum Administration
    Réponses: 2
    Dernier message: 23/12/2005, 14h59
  2. [Timer] Comment mettre en place un genre de timer ?
    Par freddyboy dans le forum MFC
    Réponses: 6
    Dernier message: 04/08/2005, 10h50
  3. Réponses: 5
    Dernier message: 28/07/2004, 11h39
  4. Réponses: 1
    Dernier message: 02/06/2004, 13h59
  5. Comment mettre en place une structure 3 tiers.
    Par WOLO Laurent dans le forum Débats sur le développement - Le Best Of
    Réponses: 13
    Dernier message: 27/07/2003, 22h01

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