Quelles sont les différences majeures entre une fonction SQL dite UDF (User Defined Function) et une procédure ?
Une fonction (ou UDF, user Define Fonction) est un programme destiné à fournir en sortie, une valeur scalaire ou une table (SELECT).
Les fonctions scalaires ne peuvent pas contenir :
de transaction (BEGIN TRANSACTION, COMMIT, ROLLBACK,
de sql dynamique (EXEC (‘…’)
d’ordre de mise à jour (INSERT, UPDATE, DELETE, MERGE)
d’ordre DDL (CREATE, ALTER, DROP), DCL (GRANT REVOKE)
un appel à une procédure (EXEC P…)
l’utilisation d’un cursor (DECLARE CURSOR, FETCH…)
de commande de débogage comme PRINT
Une fonction table peut contenir des ordres de mise à jour, mais ces commandes ne peuvent porter qu’uniquement sur la table en sortie.
Une fonction se crée par CREATE FUNCTION et si vous le souhaitez vous pouvez la placer dans un schéma SQL particulier que vous aurez préalablement créé.
Une procédure se créée par CREATE PROCEDURE et ses E/S sont :
* des paramètres input et output
* un éventuel jeu de résultat (voir même plusieurs)
* une valeur de retour (code d’erreur)
Elle peut contenir tout code SQL, y compris :
* transaction
* mise à jour,
* SQL dynamique
* cursor
* commande DDL
Bien entendu vous pouvez créer vos procédures dans différents schémas SQL que vous aurez préalablement créés.
***
Frédéric BROUARD – SQLpro – MVP SQL Server
Spécialiste SQL/BD modélisation de données
SQL & SGBDR http://sqlpro.developpez.com/
Expert SQL Server : http://www.sqlspot.com
audits – optimisation – tuning – formation
Rebonjour,
On peut aussi utiliser les fonction dans les clauses WHERE & bien sur Dans HAVING
ex …..WHERE Attribut=FonctionFonction(par1…parN)
Bonjour,
juste des petites remarques.
-On peut utiliser les cursor (DECLARE CURSOR, FETCH…) dans les fonctions scalaire(j ‘ai travaillé sous SQLserver 2008 & MySql 5).
-parmi les avantages de la fonction scalaire qu’on peut l’utiliser dans la clause SELECT ex: SELECT Fonction(par1…parN), attribut1,….. from Table join ..)
Merci.