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

Forms Oracle Discussion :

Comment optimiser cet unité de programme


Sujet :

Forms Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Août 2004
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 51
    Par défaut Comment optimiser cet unité de programme
    Bonjour,

    J'ai un bloc de données DORE qui est référencé à une table.

    La clause WHERE du bloc DORE est construite dynamiquement et me ramène de 0 à n enregistrements (QUERY 1).

    Je peux à partir des enregistrements que me ramène la clause WHERE faire une nouvelle recherche qui me ramène un enregistrement (QUERY 2)

    J'ai un bouton qui me permet d'appeler une nouvelle FORM en lui passant des données sur l'enregistrement (ENREG) sur lequel je suis positionné.

    Avant d'appeler le form je sauvegarde la clef qui est un numérode de dossier (:dore.dore_dossierrecouvrement)

    Lorsque je revient de l'appel de ma FORM, je fait :

    - un Execute_query qui représente le QUERY 1
    - j'appelle la procédure repositionnement.

    Comment optimiser l'unité de programme décrit ci-dessous afin que je puisse me positionner sur l'enregistrement du QUERY 2?

    C'est rapide si l'enregistrement (ENREG) est vers le début, mais extrêmement lent si l'enregistrement (ENREG) est vers la fin.

    --------------------------------------------
    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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
     
    PROCEDURE REPOSITIONNEMENT IS
     
      v2_premier    VARCHAR2(2000);
      v2_dernier    VARCHAR2(2000);
      v2_type_enreg VARCHAR2(2000);
     
      dt_deb        DATE;
      dt_fin        DATE;
     
    BEGIN
      --Se repositionner
      dt_deb := SYSDATE;
      --message('nb_dossier=' || :parameter.nb_dossier || 'HEURE=' || TO_CHAR(SYSDATE,'HH24:MI:SS'));   
      --message('nb_dossier=' || :parameter.nb_dossier || 'HEURE=' || TO_CHAR(SYSDATE,'HH24:MI:SS'));
      IF :parameter.nb_dossier IS NOT NULL THEN 
        FIRST_RECORD;
        v2_premier := :SYSTEM.CURSOR_RECORD;
     
        LAST_RECORD;
        v2_dernier := :SYSTEM.CURSOR_RECORD;
     
        --message('v2_dernier=' || v2_dernier || ' -v2_premier=' || v2_premier || 'HEURE=' || TO_CHAR(SYSDATE,'HH24:MI:SS'));
        --message('v2_dernier=' || v2_dernier || ' -v2_premier=' || v2_premier || 'HEURE=' || TO_CHAR(SYSDATE,'HH24:MI:SS'));
        IF v2_dernier <> v2_premier THEN
          v2_type_enreg := 'n enreg-';
          FIRST_RECORD;
          LOOP
     
            IF :dore.dore_dossierrecouvrement = :parameter.nb_dossier THEN
              --message('trouve=' || :parameter.nb_dossier || 'HEURE=' || TO_CHAR(SYSDATE,'HH24:MI:SS'));
              --message('trouve=' || :parameter.nb_dossier || 'HEURE=' || TO_CHAR(SYSDATE,'HH24:MI:SS'));
              :parameter.v2_system_cursor_record := :SYSTEM.CURSOR_RECORD;
              EXIT;
            END IF;
     
            IF :system.last_record = 'TRUE' THEN
              EXIT;
            END IF;
     
            NEXT_RECORD;
     
          END LOOP;
        ELSE
          v2_type_enreg := '1 enreg -';  	
        END IF;
     
        IF :parameter.v2_system_cursor_record IS NOT NULL THEN
          GO_RECORD(:parameter.v2_system_cursor_record);
          :parameter.v2_system_cursor_record := NULL;
          :parameter.nb_dossier              := NULL;
        END IF;
      END IF;
     
      dt_fin := SYSDATE;
     
      message(v2_type_enreg || 'Temps=' || TO_CHAR(dt_deb, 'HH24:MI:SS') ||'-' || TO_CHAR(dt_fin, 'HH24:MI:SS'));
      message(v2_type_enreg || 'Temps=' || TO_CHAR(dt_deb, 'HH24:MI:SS') ||'-' || TO_CHAR(dt_fin, 'HH24:MI:SS'));
     
    END;
    --------------------------------------------

    Merci pour votre aide.

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Août 2005
    Messages
    316
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 316
    Par défaut
    pourquoi un repositionnement ?
    En retour de la forme appellée , la forme en cours doit
    être dans le même etat qu'avant l'appel ,
    du moins il me semble.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Août 2004
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 51
    Par défaut
    Non car :

    Query 1 :
    enreg 1
    enreg 2
    enreg 3
    --------
    enreg n

    Query 2
    enreg 5650

    Appel FORM pour enreg 5650

    Retour FORM

    Excute_query

    Query 1 :
    enreg 1
    enreg 2
    enreg 3
    --------
    enreg n

    => But me positionner sur enreg 5650 par appel de la procédure REPOSITIONNEMENT.

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Août 2005
    Messages
    316
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 316
    Par défaut
    Daccord mais si tu ne fait pas a nouveau le execute_query ?
    sinon memorise le :SYSTEM.CURSOR_RECORD avant l'appel
    au retour fait execute_qery et go_record vers le numeros memorisé

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Août 2004
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 51
    Par défaut
    Non car

    le :SYSTEM.CURSOR_RECORD avant l'appel est égal à 1 puis que je n'ai qu'un seul enregistrement (Query 2).

  6. #6
    Membre chevronné
    Profil pro
    Inscrit en
    Août 2005
    Messages
    316
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 316
    Par défaut
    dans ce cas memorise le avant l'appel au query 2

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Août 2004
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 51
    Par défaut
    Je sais pas si tu comprends mon problème :

    Mon enreg 5650 est quelque part dans le QUERY 1

    Quand j'exécute le QUERY 2, enreg 5650 n'est pas positionné dans QUERY 1 => je ne peus pas le mémoriser

Discussions similaires

  1. Comment ajouter cet outil à mon programme
    Par rechercheh dans le forum Développement Web en Java
    Réponses: 0
    Dernier message: 25/09/2012, 17h00
  2. [XL-2003] Comment Optimiser un Programme Sur Excel
    Par Adilleroy dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 05/07/2010, 14h29
  3. Comment formuler cet énoncé en programme linéaire correct
    Par Lucas Panny dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 19/08/2009, 13h47
  4. Comment optimiser mon programme
    Par fouedou77 dans le forum C
    Réponses: 2
    Dernier message: 29/06/2009, 09h51
  5. Réponses: 9
    Dernier message: 07/11/2006, 14h12

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