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 :

Optimisation de procédure


Sujet :

PL/SQL Oracle

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 7
    Par défaut Optimisation de procédure
    Bonjour,

    Est-ce que ce problème a été résolu ? Car j'ai le même problème sur une procédure qui me prend à peu près une heure pour le insert dans une autre table et le delete depuis la table d'origine...
    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    PROCEDURE PR_VERIF_PRESENCE_AGENCE_T_AGC
    AS
     
    v_code_siege			VARCHAR2(5);
     
    CURSOR loop_cursor IS
    	SELECT DISTINCT CODE_SIEGE
    	FROM   T_AGC T1
    	WHERE  T1.CODE_OPERATION <> 'S'
      	AND    NOT EXISTS (SELECT NULL
    		   	   FROM   PS_AGENCE_BNP A
    			   WHERE  T1.CODE_SIEGE = A.CODE_AGENCE);
     
    BEGIN
     
    OPEN loop_cursor;
    LOOP
    FETCH loop_cursor INTO v_code_siege;
    EXIT WHEN loop_cursor%NOTFOUND;
     
    	INSERT INTO T_ANO
    	       (CLETANO, TYP_DONNEES, DATA, DDATE, JOUR, CODE)
    	SELECT	SEQ_T_ANO.NEXTVAL ,
    		TYP_DONNEES     ,
    		TYP_ENREG || TYP_DONNEES || RPAD(ID_INTERNATIONAL,18) || RPAD(NUM_SIRET,14) ||
    		CODE_OPERATION || RPAD(CODE_SIEGE,5) || RPAD(ID_SGI,12) || IND_SIEG_PRINC ||
    		NTURE_REL_CLTLE || T_AGC.FILLER,
    		DATE_TRAIT,
    		TO_CHAR(SYSDATE,'YYYYMMDD'),
    		'A56'
    	FROM   T_AGC, T_ENTETE
    	WHERE  CODE_SIEGE = v_code_siege
            AND    TYPE_FICHIER IN ('SAE', 'CCS');
     
    	DELETE FROM T_AGC WHERE CODE_SIEGE = v_code_siege;
     
    END LOOP;
    CLOSE loop_cursor;
     
    COMMIT;
     
    END PR_VERIF_PRESENCE_AGENCE_T_AGC;
    Merci.

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Il faudrait au moins la description de vos tables (avec les index) présentes dans cette procédures.

    Enfin l'idée c'est que votre curseur ne sert à rien, quelque chose comme ceci fera l'affaire :
    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
    31
    32
    33
    34
    35
    36
    37
    38
    CREATE OR REPLACE PROCEDURE PR_VERIF_PRESENCE_AGENCE_T_AGC
    AS
     
    BEGIN
     
        INSERT INTO T_ANO (CLETANO, TYP_DONNEES, DATA, DDATE, JOUR, CODE)
        WITH AGC AS
        (
        SELECT DISTINCT CODE_SIEGE
          FROM T_AGC T1
         WHERE T1.CODE_OPERATION <> 'S'
           AND NOT EXISTS (SELECT NULL
                             FROM PS_AGENCE_BNP A
                            WHERE T1.CODE_SIEGE = A.CODE_AGENCE)
        )
        SELECT SEQ_T_ANO.NEXTVAL
             , ENT.TYP_DONNEES
             , TYP_ENREG || TYP_DONNEES || RPAD(ID_INTERNATIONAL,18) || RPAD(NUM_SIRET,14) ||
               CODE_OPERATION || RPAD(CODE_SIEGE,5) || RPAD(ID_SGI,12) || IND_SIEG_PRINC ||
               NTURE_REL_CLTLE || T_AGC.FILLER
             , ENT.DATE_TRAIT
             , TO_CHAR(SYSDATE, 'YYYYMMDD')
             , 'A56'
          FROM AGC
               INNER JOIN T_AGC
                 ON T_AGC.CODE_SIEGE = AGC.CODE_SIEGE
               CROSS JOIN T_ENTETE ENT
         WHERE TYPE_FICHIER IN ('SAE', 'CCS');
     
        DELETE FROM T_AGC
         WHERE CODE_OPERATION <> 'S'
           AND NOT EXISTS (SELECT NULL
                             FROM PS_AGENCE_BNP A
                            WHERE T_AGC.CODE_SIEGE = A.CODE_AGENCE));
     
    COMMIT;
     
    END PR_VERIF_PRESENCE_AGENCE_T_AGC;

Discussions similaires

  1. optimiser une procédure stockée
    Par ed222 dans le forum Développement
    Réponses: 8
    Dernier message: 15/06/2010, 17h30
  2. [optimisation] arguments procédure stocké
    Par freuh94 dans le forum Développement
    Réponses: 8
    Dernier message: 12/05/2010, 02h32
  3. Optimisation de procédure
    Par Superdub dans le forum PL/SQL
    Réponses: 28
    Dernier message: 22/05/2009, 11h44
  4. [SQL2005] Optimiser une procédure stockée
    Par david_chardonnet dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 20/12/2006, 15h48
  5. Réponses: 5
    Dernier message: 09/05/2005, 12h24

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