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 :

Web Application, executer une fonction


Sujet :

Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2006
    Messages
    100
    Détails du profil
    Informations personnelles :
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2006
    Messages : 100
    Par défaut Web Application, executer une fonction
    Bonsoir tout le monde.

    Je travaille sur un projet de création d'une web application oracle.

    j'ai une fonction que je cherche à optimiser.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    FUNCTION GET_ALL_BIEN_BY_CLIENT(v_numclient Client.NUMCLIENT%type, v_villebien Bien.VILLEBIEN%type) RETURN sqlcur AS
      pcur sqlcur;
      BEGIN
       open pcur for select
        bien.*,
        etatbien.LIBELLEETAT
       from BIEN right join etatbien on(bien.NUMBIEN = etatbien.NUMBIEN)
       where bien.NUMBIEN in (select proposer.numbien from proposer where proposer.NUMCLIENT = v_numclient)
       and bien.VILLEBIEN = v_villebien;
       return pcur;
    END GET_ALL_BIEN_BY_CLIENT;
    Cette fonction me permet de retourner les biens d'un client donné d'une ville donnée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    http://localhost:8080/projet/AFFICHAGE_LISTE?v_numclient=1&v_villebien=Paris
    ce que je cherche à faire c'est afficher tout les bien d'un client dans toutes les villes, dois je ajouter une nouvelle fonction ou bien y a une autre alternative en utilisant la même fonction ce qui me permettra de gagner en temps et que je trouve plus propres.

    Merci d'avance

  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
    Rapidement, vous pourriez modifier votre WHERE en ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AND (bien.VILLEBIEN = v_villebien OR v_villebien IS NULL)
    Comme ça, si vous passez null en second argument, vous aurez toutes les villes.

    En terme d'optimisation :
    1. Évitez le select *, nommez toutes les colonnes
    2. La partie traitée dans le IN, ne peut-elle pas remonter en jointure ?
    3. Vous avez fait une jointure externe, mais le côté externe disparait avec les filtres mis en places, vous pouvez donc remplacer votre RIGHT JOIN par un INNER JOIN.
    4. Des alias facilitent la relecture
    5. Une mise en page claire ne fait pas gagner en performance, mais vous gagnez en lisibilité et donc en maintenance, il ne faut pas le négliger


    Ce n'est que mon avis, mais ça me paraît plus lisible !
    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
    FUNCTION GET_ALL_BIEN_BY_CLIENT
    (
      v_numclient Client.NUMCLIENT%type,
      v_villebien Bien.VILLEBIEN%type
    )
    RETURN sqlcur AS pcur sqlcur;
     
    BEGIN
     
        open pcur FOR
        SELECT bn.*, -- à remplacer par toutes les colonnes
               eb.libelleetat
          FROM bien bn
               INNER JOIN etatbien eb
                 ON bn.numbien = eb.numbien
               INNER JOIN proposer pr
                 ON pr.numbien = bn.numbien
         WHERE pr.numclient = v_numclient
           AND ( bn.villebien = v_villebien
                OR v_villebien IS NULL );
     
       RETURN pcur;
     
    END GET_ALL_BIEN_BY_CLIENT;
    En fonction de votre modèle de données, et notamment de la cardinalité entre les tables proposer et bien, cette fonction peut ou ne peut pas donner les mêmes résultats que la votre

  3. #3
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2006
    Messages
    100
    Détails du profil
    Informations personnelles :
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2006
    Messages : 100
    Par défaut
    Salam

    Merci beaucoup Waldar ça marche bien, et merci pour les suggestions

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 08/03/2013, 11h04
  2. [VBA] Executer une fonction en passant son nom en argument
    Par David Guyon dans le forum Access
    Réponses: 4
    Dernier message: 05/10/2005, 19h56
  3. executer une fonction à la fermeture d'une fenêtre
    Par Oluha dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 22/02/2005, 09h46
  4. [Reflection] Executer une fonction dont le nom est contenu dans un String
    Par christobal dans le forum API standards et tierces
    Réponses: 8
    Dernier message: 05/07/2004, 15h23
  5. Réponses: 4
    Dernier message: 02/06/2004, 16h35

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