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

Langage SQL Discussion :

Difference procedure stocké et fonction ?


Sujet :

Langage SQL

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

    Informations forums :
    Inscription : Janvier 2004
    Messages : 44
    Points : 37
    Points
    37
    Par défaut Difference procedure stocké et fonction ?
    Bonjour,

    qu'elle est la difference entre une procedure stockée est une fonction ?
    Car j'utilise que des procedures stockées mais sans trop savoir pourquoi

    De plus est il possible de faire communiquer une PS et une fonction ?

    Merci

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 76
    Points : 83
    Points
    83
    Par défaut
    Une procédure fait quelquechose et une fonction vaut quelquechose
    C'est comme en programmation.

    Une procedure peut appeller une fonction et vice versa

  3. #3
    BiM
    BiM est déconnecté
    Expert éminent sénior
    Avatar de BiM
    Femme Profil pro
    Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT
    Inscrit en
    Janvier 2005
    Messages
    7 796
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT

    Informations forums :
    Inscription : Janvier 2005
    Messages : 7 796
    Points : 10 765
    Points
    10 765
    Par défaut
    Une procédure possède une valeur de renvoi et une procédure n'en possède pas.

    En fait pour une fonction tu peux faire : a:=taFonction();
    Alors qu'une procédure pourra avoir des valeurs OUTPUT et il faut les récupérer à la main. Cela permet d'éxécuter ta procédure, ta/tes valeur(s) sont stockées et les récupérer quelques éxécutions plus tard.

  4. #4
    Membre régulier
    Inscrit en
    Avril 2004
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 70
    Points : 84
    Points
    84
    Par défaut
    Bonjour,
    en plus de ce qui a été dit. Et venant compléter quelques réponses je dirais que :
    La fonction retourne une valeur scalaire ou une carément une table ( ça dépend des SGBD et des versions aussi ). Et dans une fonction on ne peut pas appéler une procédure ou faire du DML sur des tables.
    La procédure ne retourne pas de valeur sauf pour les entiers car la procédure a un evaleur de retour mais seulement entière. Dans une procédure on peut jouer avec les tables et faire appel à des procédures et des fonctions et on peut aussi y mettre des variables 'OUTPUT' pour retourner des valeurs même non entières. Sauf qu'on ne retourne qu'une seule valeur par variable et on ne pourra pas retourner des tables.

    En bref, voilà les principales différences fonctionnelles entre les deux.
    Au développeur de choisr laquelle utiliser selon son besoin.

    A+

  5. #5
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 848
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 848
    Points : 52 966
    Points
    52 966
    Billets dans le blog
    6
    Par défaut
    je suis navré de vous dire que vous êtes tous loin de connaitre la différence fondamentale entre une fonction et une PS...

    La seule chose importante à dire sur le sujet est la suivante :

    Une procédure stockée peut contenir une transaction, voire plusieurs.
    En aucun cas une fonction peut contenir une transaction puisque'elle est susceptible d'être utilisée au sein d'une requête ou d'une procédure.

    Le reste : retour ou non n'est que détail car une procédure peut retourner une valeur ou une table, tout comme une fonction.
    En outre une fonction peut lancer des ordres SQL et retourner une valeur bidon.

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  6. #6
    Membre régulier
    Inscrit en
    Avril 2004
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 70
    Points : 84
    Points
    84
    Par défaut
    Désolé, sqlPro.

    Vous avez dit : "En outre une fonction peut lancer des ordres SQL et retourner une valeur bidon. " Or, on ne peut en aucun cas utiliser une instruction insert, update ou delete sur une table dans une fonction. ALors que pourrait être l'ordre SQL que lancera la fonction et retourner une valeur bidon ?

    Et pour la réplique : "En aucun cas une fonction peut contenir une transaction puisque'elle est susceptible d'être utilisée au sein d'une requête ou d'une procédure". Je suis d'accord qu'une fonction ne contient pas de transaction mais seulement parcequ'elle est susceptible d'être utilisée au sein d'une requête. Au sein d'une procédure, je ne vois pas que serait l'inconvénient car on peut aussi utiliser une procédure au sein d'une autre et la transaction ne posera aucun problème.

    Autre réplique, "une procédure peut retourner une valeur ou une table". Là si tu pourrais nous éclaircir sur la manière dont une procédure retourne une table? car je sais qu'on peut faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from dbo.fonction(paramètres)
    mais comment pourrait-on le faire à partir d'une procédure?

    Je suis encore navré, mais fonctionnellement, ce n'est pas la transaction qui nous pousse à choisir la fonction ou la procédure mais c'est surtout le traitement et le retour de l'information( Données ). Car si c'est une procédure, elle peut contenir une transaction ; si c'est une fonction, elle peut être englobée dans une transaction et je crois que ça reviendrait au même. La transaction est toujours là.

    Je ne dis pas que j'ai tout à fait raison, mais c'est une discution à mener.

    Respectueusement.

Discussions similaires

  1. Réponses: 5
    Dernier message: 10/03/2014, 18h02
  2. Procedure Stockée à double fonction
    Par jubourbon dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 16/04/2009, 10h00
  3. Réponses: 4
    Dernier message: 05/03/2009, 13h52
  4. Best practice : Procedure stockée ou Fonction
    Par rvaouate dans le forum Développement
    Réponses: 5
    Dernier message: 10/09/2008, 18h38
  5. procedure stockée et fonction "split"
    Par wehtam dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 18/07/2005, 16h21

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