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

DB2 Discussion :

Probleme sur requete "Select for update"


Sujet :

DB2

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Septembre 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Développeur COBOL
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2013
    Messages : 7
    Par défaut Probleme sur requete "Select for update"
    Bonjour,

    Je dois mettre en place un curseur "select for update" mais l'ordre de lecture des lignes se fait sur l'index cluster (colonnes de sélection par le WHERE) alors que je dois traiter les lignes dans un ordre différent. Bien sur la clause ORDER BY est interdite. Comment puis-je écrire autrement ce curseur.

    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
    EXEC SQL DECLARE C-09 CURSOR WITH HOLD FOR   
      SELECT  REF_MAND_FIX                    
              ,SUBSTR(CHAR(REF_MAND_IND),2,25) 
              ,NO_PART                         
              ,ID_CREANR                       
              ,NOM_CREANR                      
              ,IBAN_DB                         
              ,BIC_DB               
              ,NO_CTRAT                        
              ,D_CREAT             
       FROM   BMTMNDT                 
       WHERE  NO_PART    = :NO-PART  
         AND  NO_CTRAT  = :NO-CTRAT 
       ORDER BY D_CREAT_10   DESC     
                ,REF_MAND_FIX DESC     
                ,REF_MAND_IND DESC     
       FOR UPDATE OF                  
                IBAN_DB              
               ,BIC_DB               
               ,D_CREAT_10      
    END-EXEC.
    Merci de votre aide.

  2. #2
    Membre Expert
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2005
    Messages
    1 473
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 473
    Par défaut
    Bonjour,

    Depuis des lustres (au moins ... ), les clauses FOR UPDATE et ORDER BY sont mutuellement exclusives.

    Je crois, mais ça reste à vérifier, que depuis une version récente de DB2 for z/OS il est possible de jouer avec les curseurs dits SCROLLABLE.

  3. #3
    Membre Expert Avatar de bernard59139
    Profil pro
    Retired
    Inscrit en
    Octobre 2006
    Messages
    966
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Retired

    Informations forums :
    Inscription : Octobre 2006
    Messages : 966
    Par défaut
    l'ordre de lecture des lignes se fait sur l'index cluster
    Ca, ce n'est absolument pas garantie. Sans ORDER BY, db2 fournit les données comme ca l'arrange.

    Pour répondre à ton besoin:
    • soit faire SELECT puis un UPDATE
    • soit mettre les données à plat (dans un seq) , travailler et faire un LOAD REPLACE.

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Septembre 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Développeur COBOL
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2013
    Messages : 7
    Par défaut
    Citation Envoyé par bernard59139 Voir le message
    Ca, ce n'est absolument pas garantie. Sans ORDER BY, db2 fournit les données comme ca l'arrange.

    Pour répondre à ton besoin:
    • soit faire SELECT puis un UPDATE
    • soit mettre les données à plat (dans un seq) , travailler et faire un LOAD REPLACE.
    Bonjour,
    Le Select+Update sont déjà dans le programme, mais ils sont trop consommateur de temps CPU, c'est pour cela que je penche pour le Select-For-Update.
    L'autre solution (Load Replace) n'est pas possible car plusieurs traitements batch tournent et la table est utilisée en lecture dans certains.

    N'y a-t-il pas une solution par jointure ou autre type de requête ?

    Merci pour vos réponses.

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Septembre 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Développeur COBOL
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2013
    Messages : 7
    Par défaut
    Citation Envoyé par Luc Orient Voir le message
    Bonjour,

    Depuis des lustres (au moins ... ), les clauses FOR UPDATE et ORDER BY sont mutuellement exclusives.

    Je crois, mais ça reste à vérifier, que depuis une version récente de DB2 for z/OS il est possible de jouer avec les curseurs dits SCROLLABLE.

    Bonjour,
    Je ne connais absolument pas cette méthode.
    Comment savoir si une telle option est accessible sur le site ?

    Merci pour vos réponses.

  6. #6
    Membre Expert Avatar de bernard59139
    Profil pro
    Retired
    Inscrit en
    Octobre 2006
    Messages
    966
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Retired

    Informations forums :
    Inscription : Octobre 2006
    Messages : 966
    Par défaut
    quelle est ta version de db2?

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Septembre 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Développeur COBOL
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2013
    Messages : 7
    Par défaut
    Citation Envoyé par bernard59139 Voir le message
    quelle est ta version de db2?

    La version sur le site est : DB2 V9 NFM (New Fonction Mode)

  8. #8
    Expert éminent
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 216
    Billets dans le blog
    16
    Par défaut
    Bonjour,


    Citation Envoyé par claudge Voir le message
    Bonjour,
    Le Select+Update sont déjà dans le programme, mais ils sont trop consommateur de temps CPU, c'est pour cela que je penche pour le Select-For-Update.
    Il faut montrer pourquoi cette solution est coûteuse. Que disent les EXPLAIN ? Les outils d’administration du genre Detector ? Combien d’index sont mis à jour ? A propos des index, les débrancher le temps de l’opération peut être bénéfique (quitte à ce que les autres batchs attendent un peu...)

    Citation Envoyé par claudge Voir le message
    L'autre solution (Load Replace) n'est pas possible car plusieurs traitements batch tournent et la table est utilisée en lecture dans certains.
    Même remarque.
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.

Discussions similaires

  1. [OCILIB] De l'influence de SetAutoCommit sur des requêtes select for update
    Par cobfly dans le forum Interfaces de programmation
    Réponses: 0
    Dernier message: 16/12/2011, 16h32
  2. Réponses: 3
    Dernier message: 16/07/2008, 14h53
  3. [HQL] probleme sur requete Update
    Par __Ez__ dans le forum Hibernate
    Réponses: 2
    Dernier message: 29/04/2008, 11h12
  4. [MySQL] Probleme sur requetes imbriquées
    Par joxbl dans le forum Langage SQL
    Réponses: 41
    Dernier message: 12/04/2006, 17h20
  5. [Verrou] SELECT FOR UPDATE
    Par e1lauren dans le forum PostgreSQL
    Réponses: 10
    Dernier message: 13/10/2005, 17h06

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