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 :

[PL/SQL] [9i] Ca prend un temps infini (ou presque !)


Sujet :

Oracle

  1. #1
    Membre régulier
    Inscrit en
    Juin 2003
    Messages
    156
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 156
    Points : 85
    Points
    85
    Par défaut [PL/SQL] [9i] Ca prend un temps infini (ou presque !)
    Bonjour,

    Me revoilà avec un nouveau problème existentiel autour du temps mis par mon script pour s'exécuter. Ci-dessous un bout de mon code un peu simplifié.

    La table lue RDD_ASS fait environ 15000 lignes. Ma fonction de debug qui s'exécute dans une transaction autonome me permet de me rendre compte (non sans un certain effroi) qu'il faut plusieurs secondes par tour de boucle !!!!!

    Des idées pour me sauver la vie ?

    Merci, bon appétit parce que l'heure approche

    Frédéric


    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
     
    		FOR vass IN (SELECT * FROM RDD_ASS WHERE NUMCMR = tabCmr(i) ) LOOP
     
    			BEGIN
    				SELECT I_ID_INDV INTO num FROM ASSU_COURANT@BDUDAC 
    							WHERE I_CD_NIRNIP = vass.NIR 
    							AND AV_ID_CMR = vass.NUMCMR;
    				debug('étape 5 - 1 2 ', 'T');
    			EXCEPTION
    			WHEN TOO_MANY_ROWS THEN	
    			-- 
    			WHEN NO_DATA_FOUND THEN				--			
    			END;
     
    		END LOOP;

  2. #2
    Membre expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Points : 3 597
    Points
    3 597
    Par défaut
    Est-ce que le problème ne vient pas du database link ?
    Où est située la base désignée par le database link ?
    Combien de temps prends en moyenne, l'instruction suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     SELECT I_ID_INDV INTO num FROM ASSU_COURANT@BDUDAC
                         WHERE I_CD_NIRNIP = vass.NIR
                         AND AV_ID_CMR = vass.NUMCMR;

  3. #3
    Membre régulier
    Inscrit en
    Juin 2003
    Messages
    156
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 156
    Points : 85
    Points
    85
    Par défaut
    Effectivement, je me suis rendu compte peu après mon post que le souci semblait venir du database link... Alors comment faire selon vous ?

  4. #4
    Membre expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Points : 3 597
    Points
    3 597
    Par défaut
    Idéalement, il faudrait avoir une copie de la table dans la base locale ...

    Peut-être copier le contenu nécessaire de la table avant d'ouvrir votre curseur ? Mais cela peut être aussi long et si table distante est mise à jour, vous n'aurez pas ces mises à jour dans votre copie locale.

  5. #5
    Futur Membre du Club
    Inscrit en
    Décembre 2005
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 9
    Points : 7
    Points
    7
    Par défaut
    Citation Envoyé par ftrifiro
    Effectivement, je me suis rendu compte peu après mon post que le souci semblait venir du database link... Alors comment faire selon vous ?
    mais c'est quoi la version de deux base et votre procédure sur quelle base

  6. #6
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 075
    Points
    19 075
    Par défaut
    Citation Envoyé par pifor
    Idéalement, il faudrait avoir une copie de la table dans la base locale ...

    Peut-être copier le contenu nécessaire de la table avant d'ouvrir votre curseur ? Mais cela peut être aussi long et si table distante est mise à jour, vous n'aurez pas ces mises à jour dans votre copie locale.
    Il y a les vues matérialisées pour ça

Discussions similaires

  1. Requête prend un temps infini
    Par mamiberkof dans le forum SQL
    Réponses: 4
    Dernier message: 09/05/2011, 09h46
  2. T-SQL - Optimisation des Cursor / Tables temp
    Par SebastienM dans le forum Développement
    Réponses: 6
    Dernier message: 15/06/2009, 10h39
  3. Réponses: 2
    Dernier message: 05/05/2009, 10h39
  4. sous requete qui prend du temps
    Par abdoing dans le forum MS SQL Server
    Réponses: 9
    Dernier message: 30/07/2007, 09h24
  5. Quel config pour Sql et jBase en même temps
    Par Rajhonson dans le forum Autres SGBD
    Réponses: 1
    Dernier message: 08/03/2007, 09h14

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