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

Oracle Discussion :

Formulation d'un UPDATE (pour éviter un curseur)


Sujet :

Oracle

  1. #1
    Membre confirmé

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    507
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 507
    Points : 503
    Points
    503
    Par défaut Formulation d'un UPDATE (pour éviter un curseur)
    Salut

    J'ai le code suivant:

    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
    28
    29
    30
    DECLARE
     
      CURSOR cur1 IS
      SELECT col1, col2, col3
        FROM TABLE1
      WHERE col4 = 'TOTO'
        AND col5 LIKE '%TITI' ;
     
      ls_col1 VARCHAR2(20);
      ls_col2 VARCHAR2(20);
      ls_col3 VARCHAR2(10);
     
    BEGIN
     
      OPEN cur1;
      LOOP
        FETCH cur1 INTO ls_col1, ls_col2, ls_col3;
        EXIT WHEN cur1%NOTFOUND;
     
        UPDATE TABLE2
          SET col3 = TO_DATE(ls_col3,'DD/MM/RRRR'),
              col4 = SYSDATE
          WHERE col1 = ls_col1
            AND col2 = ls_col2;
     
      END LOOP;
     
    CLOSE cur1;
    COMMIT;
    END;
    Dans un souci de performances, je voudrais éviter le curseur et tout mettre dans une requête "UPDATE".
    Je pense que cela est possible mais je tourne en rond...

    Quelqu'un entrevoit une solution?

    Merci

  2. #2
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    Essaye un truc comme cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    UPDATE TABLE2 
    SET (col3, col4) = (SELECT TO_DATE(col3,'DD/MM/RRRR'), SYSDATE 
                        FROM TABLE1
                        WHERE TABLE1.col1 = TABLE2.col1
                          AND TABLE1.col2 = TABLE2.col2
                          AND TABLE1.col4 = 'TOTO' 
                          AND TABLE1.col5 LIKE '%TITI')
    WHERE EXISTS (SELECT NULL 
                  FROM TABLE1
                  WHERE TABLE1.col1 = TABLE2.col1
                    AND TABLE1.col2 = TABLE2.col2
                    AND TABLE1.col4 = 'TOTO' 
                    AND TABLE1.col5 LIKE '%TITI');
    J'affirme péremptoirement que toute affirmation péremptoire est fausse
    5ième élément : barde-prince des figures de style, duc de la synecdoque
    Je ne réponds jamais aux questions techniques par MP

  3. #3
    Membre confirmé

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    507
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 507
    Points : 503
    Points
    503
    Par défaut
    Merci

    je ne sais pas si cela sera plus rapide car TABLE1 n'est pas si grosse, mais merci pour cette idée, elle me servira certainement plus tard

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

Discussions similaires

  1. [DeskI Xi3] Formule pour éviter les doublons
    Par mamyda dans le forum Débuter
    Réponses: 7
    Dernier message: 09/11/2010, 18h13
  2. Requête, pour éviter un curseur
    Par Jinroh77 dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 02/06/2010, 18h10
  3. Aide pour éviter un curseur!
    Par bluecurve dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 18/11/2007, 15h59
  4. [sql] update pour debutant
    Par zebulix13 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 11/06/2004, 15h45

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