Vous êtes sur la page 1sur 4

Cours 10 : Les fonctions définies par l’utilisateur

SQL Server prend en charge trois types de fonctions utilisateurs : les fonctions scalaires, les fonctions tables en ligne
et les fonctions tables multi-instructions. Une fonction accepte entre 0 et 1024 paramètres d’entrée et retourne, soit
une valeur scalaire, soit une table. Pour chacun des paramètres de la fonction, il est possible de définir une valeur par
défaut en utilisant le mot clé DEFAULT. Mais lors de l’appel de la fonction, il faut préciser le mot clé DEFAULT pour
utiliser la valeur par défaut. Ce comportement est différent de celui des procédures où la valeur par défaut est prise
en compte de façon automatique si le paramètre n’est pas précisé lors de l’appel. Les fonctions de type scalaire
retournent, à l’aide du mot clé RETURN, une valeur scalaire. Bien sûr, les données de type timestamp, d’un type de
données défini par l’utilisateur et d’un type table ou cursor ne peuvent être renvoyées. Il en est de même pour les
types de données text, ntext et image.

Les fonctions tables retournent comme résultat une table. Elles ne contiennent pas de corps et la table est le résultat
d’une commande SELECT unique. Si la fonction est composée de plusieurs instructions, alors les instructions sont
encadrées par les mots clés BEGIN et END.

Les fonctions disposent d’un champ d’action limité et elles ne peuvent en aucun cas modifier leur environnement
d’exécution. Depuis une fonction, il n’est donc pas possible de modifier le contenu d’une table de la base de données.
À l’intérieur d’une fonction, les seules actions possibles sont celles qui vont modifier les objets locaux à la fonction.

Dès que la fonction est créée à l’aide de l’instruction CREATE FUNCTION, la clause WITH SCHEMABINDING permet de
lier la fonction à tous les objets auxquels elle fait référence. Dès lors, toute modification (ALTER) ou suppression
(DROP) de ces objets est vouée à l’échec. Cette clause, non obligatoire, suppose que tous les objets référencés
appartiennent à la même base de données et que le propriétaire de la fonction possède un droit de REFERENCE sur
les objets référencés par la fonction.

1. Création d’une fonction

Fonctions scalaires

CREATE FUNCTION nom_fonction ( [ liste_des_paramètres] )


RETURNS type_données
[ WITH ENCRYPTION| WITH SCHEMABINDING]
[ AS ]
BEGIN
corps de la fonction
RETURN valeur
END

Fonctions tables en ligne

CREATE FUNCTION nom_fonction ( [ liste_des_paramètres] )


RETURNS TABLE
[ WITH ENCRYPTION| WITH SCHEMABINDING]
[ AS ]
RETURN [ (requête_SELECT ) ]

Fonctions tables multi-instructions

CREATE FUNCTION nom_fonction ( [ liste_des_paramètres] )


RETURNS @@variable_retour TABLE (nom_colonne type, ...)
[ WITH ENCRYPTION| WITH SCHEMABINDING]
[ AS ]
BEGIN
corps de la fonction
RETURN valeur
END

Exemples
Création de la fonction nbre_cde qui retourne le nombre de commandes passées par un client transmis en paramètre :

AM1
Cours 10 : Les fonctions définies par l’utilisateur

Création d’une fonction table inline qui permet de connaître les articles qui possèdent un prix inférieur à celui passé en paramètre :

Création d’une fonction qui retourne une table et qui permet de connaître, pour le client passé en paramètre, le nombre de commandes
passées et le montant moyen de ces commandes.

AM2
Cours 10 : Les fonctions définies par l’utilisateur

Utilisation de la fonction nbre_cde :

Utilisation de la fonction de type table :

Utilisation de la fonction de type table multiligne :

2. Modification d’une fonction


La commande ALTER FUNCTION accepte les mêmes paramètres que CREATE FUNCTION. La différence principale
réside dans le fait que la commande ALTER FUNCTION permet de réécrire le corps d’une fonction qui existe déjà dans
la base tandis que la commande CREATE permet de créer une nouvelle fonction. La commande ALTER ne permet pas,
par exemple, de changer simplement une ligne de code mais elle permet de changer la totalité de la définition de la
fonction.

AM3
Cours 10 : Les fonctions définies par l’utilisateur

3. Suppression d’une fonction


C’est la commande DROP FUNCTION qui permet de supprimer une fonction.

AM4

Vous aimerez peut-être aussi