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 :

Comment savoir quand créer une fonction/procédure


Sujet :

Oracle

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Juillet 2010
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Comment savoir quand créer une fonction/procédure
    Salut à tous,

    je me présente je m'appelle Aurélien, je suis développeur et je voulais poser une question à d'autres développeurs ayant de l'expérience avec Oracle.

    Scenario
    Je bosse sur une plate-forme PHP (5.1) avec une base de données Oracle (11.2) et je me demandais comment savoir en fonction de ses besoins si je dois:
    -créer une nouvelle fonction ou procédure au niveau Oracle
    -créer une fonction PHP qui fait la même chose.

    Ce qui m'est arrivé c'est que dans mon cas j'avais créer une fonction très simple Oracle qui se chargeait de récupérer les id des différentes entreprises en fonction d'un facteur commun et qui retournait une chaîne de caractères des ses id séparés par le caractère ",". Mon collègue m'a justement fait remarquer que je pouvais faire la même chose avec PHP avec une requête et m'a dit que c'était plutôt inutile de faire une fonction au niveau de ma base pour faire ça. Surtout qu'il a ajouté que si on devait changer quelque chose au niveau de la table on devrait intervenir non seulement au niveau des pages php utilisant celle-ci mais aussi au niveau de la base avec ce genre de fonction.

    C'est pour cela que ça m'intéresserai de savoir si quelqu'un a de l'expérience dans ce domaine pour savoir m'indiquer dans quel mesure doit-on créer une fonction ou procédure au niveau de la base de données Oracle?

    Merci d'avance

  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
    L'avantage d'une procédure / fonction en base est qu'elle est déjà compilée, et qu'il n'y a pas d'aller-retour entre ton client (php) et la base durant l'exécution de celle ci.
    L'autre avantage des procédures basées, c'est que ça devient réutilisable.

    Par contre, c'est vrai qu'il ne faut pas tomber dans l'excès inverse. Dans ton cas, ta fonction renvoie quelque chose, mais tu vas devoir retraiter en php les informations renvoyées.
    Tout dépend de la complexité et du nombre d'endroits où cette fonction est appelée.

    Il faut penser aussi à la maintenance de cette fonction. Imaginons que tu ais besoin de modifier le code. Une simple mise à jour de la fonction basée, et c'est fini.
    Si tout est codé en php, faut remodifier chaque code php

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Juillet 2010
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Salut,

    tout d'abord merci de ta réponse . Alors je te donne mon exemple comme ça tu réussira à me dire si effectivement ça ne valait pas la peine de créer cette fonction au niveau de la base.

    Imaginons les tables
    Partecipation_evenement (idEvent primaryKey number, idSociete number)
    Societe (idSociete number, nomSociete varchar2 ... )

    Ma fonction consistait à faire ceci:
    Code pl/sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    l_o_societes varchar2(500);
    for i in (select distinct idSociete from Partecipation_evenement where idEvent = XXX
                ) loop
    l_o_societes := l_o_societes ||','||i.idimpresa;
    return substr(l_o_imprese,2,length(l_o_imprese)-1);

    Comme tu le vois c'est une boucle qui concatène des id et renvoi la chaine. Tu peux faire la meme chose en php:

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $sqlStr = ' select distinct idSociete from Partecipation_evenement where idEvent = XXX';
     
    $recordSet = fonctionExecutionRequete($sqlStr);
     
    while ($rowSet = $recordSet->fetchRow(DB_FETCHMODE_ASSOC)) {
    	$idSociete = $idSociete . ',' . $rowSet['idSociete'];
    }

    J'oubliais, cette fonction est utilisée seulement dans 1 page / 3000 et quand tu parles d'aller/retour je pense qu'il s'agirait juste d'une chaîne du genre "1,3,5,6564,76,87,234"... donc aller retour je pense que c'est très peu coûteux en ce sens.
    Qu'en penses-tu?

  4. #4
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    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 453
    Points : 18 391
    Points
    18 391
    Par défaut
    Par rapport à votre besoin initial :
    j'avais créé une fonction très simple Oracle qui se chargeait de récupérer les id des différentes entreprises en fonction d'un facteur commun et qui retournait une chaîne de caractères des ces id séparés par le caractère ",".
    Comme vous êtes en 11gR2, pas besoin de le coder, c'est déjà implémenté avec la fonction LISTAGG !

  5. #5
    Nouveau Candidat au Club
    Inscrit en
    Juillet 2010
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Oui c'est vrai sauf que à ce que mon collègue me dit vu qu'on veut se rapprocher du "modèle view controller" faire une chose comme ça voudrait dire s'en éloigner. Il me disait qu'il vaut mieux faire l'extraction (model) et ensuite via php modifier la donnée comme on le souhaite (view).

    En tous les cas merci bien pour ta réponse.

    Salut

  6. #6
    Futur Membre du Club
    Femme Profil pro
    Analyse système
    Inscrit en
    Mars 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Analyse système
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 4
    Points : 7
    Points
    7
    Par défaut ajout d'une procedure
    bonsoir à tous
    je me présente

    je suis étudiante et je prépare un projet de fin d'étude sur les services web et l'architecture SOA

    je développe une base de données sur un serveur (en intranet) en oracle
    je suis débutante dans le domaine
    si vous pouvez m'orieter: comment je fais pour créer une procédure dans une BD, qui sera transformée en un service web

    merci d'avance pour votre collaboration

    salutations

Discussions similaires

  1. comment créer une fonction et la déclancher a chaque jour
    Par G_Kill dans le forum SQL Procédural
    Réponses: 5
    Dernier message: 19/12/2006, 18h02
  2. Comment faire une fonction - procédure
    Par Madmac dans le forum C
    Réponses: 14
    Dernier message: 12/08/2006, 09h57
  3. Comment savoir quand une JFrame est rafraichie?
    Par mardona dans le forum Agents de placement/Fenêtres
    Réponses: 1
    Dernier message: 19/08/2005, 12h20
  4. [JScrollPane]Comment savoir quand une scrollbar apparait ?
    Par FrigoAcide dans le forum Composants
    Réponses: 4
    Dernier message: 29/04/2004, 10h10

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