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 :

optimiser update dynamique


Sujet :

PL/SQL Oracle

  1. #1
    Nouveau membre du Club
    Inscrit en
    Janvier 2009
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 28
    Points : 25
    Points
    25
    Par défaut optimiser update dynamique
    voila je suis sur oralce 10g / linux
    je fais un update dynamique qui fonctionne correctement , mais je voulais juste vérifier s'il ya pas d'autre solution pour ne pas faire 2 fois lappel de la meme focntion de check voila le code
    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
    open CUR for 'select rowid,nom,prenom, from client where classe = 100 ';
    BEGIN
         requete := 'UPDATE client
                        set flag = DECODE(:1,0,0,1),
                            nb_ligne = :1
      				           WHERE ROWID = :2';
     
          --OPEN CUR;
          LOOP
          FETCH CUR BULK COLLECT INTO lt_ROWID,lt_Nom,lt_prenom LIMIT 1000;
     
              FOR J IN NVL(lt_ROWID.FIRST, 0) .. NVL(lt_ROWID.LAST, -1) LOOP
     
    			   execute immediate requete USING VALID_Client(),VALID_Client(), lt_ROWID(J);
     
              END LOOP;
              commit;
          EXIT WHEN CUR%NOTFOUND;
          END LOOP;
          CLOSE CUR;
          EXCEPTION WHEN OTHERS THEN
                        po_LIBERR := 'client invalide: '||SQLCODE||' : '||sqlerrm;
    end;
    dans ma requête d'update je fais l'appel de l'argument :1 2 fois et j ai vu que ça fonctionné que si je metté la fonction correspondante 2 fois du coups lors de l'exécution la même fonction est exécuter 2 fois pour chaque appel (perte de temps) . je voualis donc savoir si ya pas moyen de l'exécuter une seul fois merci

  2. #2
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Je suppose que tu parles de la fonction valid_client.
    Pour ne l'appeler qu'une seule fois, il suffit d'affecter une variable (v_flag).
    Pense à fermer le curseur en cas d'erreur.

    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
    OPEN CUR FOR 'select rowid, nom, prenom from client where classe = 100 ';
    BEGIN
    	requete := 'UPDATE client 
    			SET flag = DECODE(:1,0,0,1),
    			nb_ligne = :1
    			WHERE ROWID = :2';
     
    	LOOP
    		FETCH CUR BULK COLLECT INTO lt_rowid, lt_nom, lt_prenom LIMIT 1000;
     
    	FOR J IN NVL(lt_ROWID.FIRST, 0) .. NVL(lt_ROWID.LAST, -1)
    	  LOOP
        	v_flag := VALID_Client();
    			EXECUTE IMMEDIATE requete USING v_flag, v_flag, lt_ROWID(J);
    	END LOOP;
     
      	COMMIT;
    	EXIT WHEN CUR%NOTFOUND;
    	END LOOP;
    	CLOSE CUR;
    EXCEPTION WHEN OTHERS
    THEN
    	po_LIBERR := 'client invalide: '||SQLCODE||' : '||SQLERRM;
    	CLOSE CUR; 
    END;
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  3. #3
    Nouveau membre du Club
    Inscrit en
    Janvier 2009
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 28
    Points : 25
    Points
    25
    Par défaut MERCI
    MERCI POUR TA RÉPONSE, pour le curseur , en fait je met le traitement dans un bloc begin end parce que je veux pas arrêter l'execution dans le cas d'une erreur je veux juste faire un maj client lors d'un pb et passer aux autres client , voila comment je my prend merci de confirmer :
    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
     
     
    open CUR FOR 'select rowid,nom,prenom, from client where classe = 100 ';
     
         requete := 'UPDATE client
                        set flag = DECODE(:1,0,0,1),
                            nb_ligne = :1
      				           WHERE ROWID = :2';
     
     
          LOOP
     
          FETCH CUR BULK COLLECT INTO lt_ROWID,lt_Nom,lt_prenom LIMIT 1000;
     
              FOR J IN NVL(lt_ROWID.FIRST, 0) .. NVL(lt_ROWID.LAST, -1) LOOP
                  begin
    execute immediate requete USING VALID_Client(),VALID_Client(), t_ROWID(J);
                  EXCEPTION WHEN OTHERS THEN
                        po_LIBERR := 'client invalide: '||SQLCODE||' : '||sqlerrm;
                        update_client(lt_ROWID(j));
    end;
              END LOOP;
     
              commit;
     
          EXIT WHEN CUR%NOTFOUND;
          END LOOP;
     
          CLOSE CUR;

Discussions similaires

  1. Optimisation: Update @OneToMany
    Par Mister-Joker dans le forum JPA
    Réponses: 1
    Dernier message: 05/06/2009, 21h43
  2. Optimisation Update sur un champ blob
    Par bibi92 dans le forum SQL
    Réponses: 1
    Dernier message: 26/09/2008, 10h51
  3. [Stratégie] faire un update dynamique !
    Par guitariste dans le forum Général Java
    Réponses: 5
    Dernier message: 18/08/2008, 00h42
  4. optimisation update entre 2 tables
    Par spip68 dans le forum SQL
    Réponses: 1
    Dernier message: 30/07/2008, 15h55
  5. Optimisation Update sur SQL SERVER 2000
    Par Hansen69 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 23/12/2007, 22h17

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