420-5D5 : BD – Les fonctions

1 octobre 2023

Les fonctions dans une base de données sont des objets SQL qui effectuent des opérations sur les données stockées dans la base de données et renvoient un résultat. Elles sont utilisées pour effectuer des calculs, des transformations de données et des manipulations sur les données stockées, ce qui les rend extrêmement utiles pour simplifier les requêtes, générer des résultats personnalisés et automatiser certaines tâches.

1 – Fonctions intégrées au SGBD

Voici quelques-unes des fonctions couramment utilisées dans Oracle :

  1. Fonctions de manipulation de chaînes de caractères :

Exemple :

SELECT CONCAT(Prenom, ' ', Nom) AS NomComplet FROM Employes;
  1. Fonctions de conversion de données :

Exemple :

SELECT TO_NUMBER(Salaire) * 12 AS SalaireAnnuel FROM Employes;
  1. Fonctions mathématiques :

Exemple :

SELECT ROUND(Salaire, 2) AS SalaireArrondi FROM Employes;
SELECT SUM(Salaire) AS SommeSalaire FROM Employes;
  1. Fonctions de date et d’heure :

Exemple :

SELECT SYSDATE AS DateActuelle FROM dual;
SELECT MONTHS_BETWEEN(DateEmbauche, SYSDATE) AS MoisAnciennete FROM Employes;
  1. Fonctions de regroupement et d’agrégation :

Exemple :

SELECT AVG(Salaire) AS SalaireMoyen FROM Employes;
SELECT COUNT(*) AS NombreEmployes FROM Employes WHERE Departement = 'Ventes';
  1. Fonctions de conversion de casse :

Exemple :

SELECT UPPER(Nom) AS NomMajuscules FROM Employes;
SELECT LOWER(Prenom) AS PrenomMinuscules FROM Employes;
  1. Fonctions de gestion de NULL :

Exemple :

SELECT NVL(Email, 'Non spécifié') AS AdresseEmail FROM Employes;

Les fonctions Oracle sont puissantes et flexibles, et elles peuvent être utilisées dans les clauses SELECT, WHERE, HAVING, ORDER BY, et d’autres parties des requêtes SQL pour manipuler et présenter les données de manière appropriée pour les besoins de l’application.


2 – Fonctions de l’utilisateur

Les fonctions de l’utilisateur (ou « user-defined functions » en anglais) dans Oracle sont des fonctions personnalisées que vous pouvez créer pour effectuer des opérations spécifiques sur les données dans votre base de données. Contrairement aux fonctions intégrées d’Oracle que nous avons discutées précédemment, les fonctions de l’utilisateur sont des fonctions personnalisées que vous créez pour répondre à des besoins spécifiques de votre application. Voici comment vous pouvez créer et utiliser des fonctions de l’utilisateur dans Oracle :

Création d’une fonction de l’utilisateur :

Pour créer une fonction de l’utilisateur dans Oracle, vous devez utiliser le langage PL/SQL (Procedural Language/Structured Query Language). Voici un exemple de création d’une fonction de l’utilisateur qui calcule le carré d’un nombre :

CREATE OR REPLACE FUNCTION CalculerCarre (n IN NUMBER)
RETURN NUMBER
IS
BEGIN
  RETURN n * n;
END CalculerCarre;

Dans cet exemple, la fonction « CalculerCarre » prend un argument « n » de type NUMBER et renvoie le carré de « n » en utilisant la clause « RETURN ».

Utilisation d’une fonction de l’utilisateur :

Après avoir créé une fonction de l’utilisateur, vous pouvez l’utiliser dans vos requêtes SQL comme n’importe quelle autre fonction. Voici un exemple d’utilisation de la fonction « CalculerCarre » :

-- Utilisation de la fonction dans une requête SELECT
SELECT CalculerCarre(5) AS CarreDeCinq FROM dual;

-- Utilisation de la fonction dans une mise à jour
UPDATE Employes SET Salaire = CalculerCarre(Salaire) WHERE Departement = 'Ventes';

Dans cet exemple, nous utilisons la fonction « CalculerCarre » pour calculer le carré de 5 et pour mettre à jour les salaires des employés en utilisant cette fonction.

Les fonctions de l’utilisateur offrent une grande flexibilité car vous pouvez les personnaliser pour répondre à des besoins spécifiques de votre application. Cependant, elles nécessitent une connaissance de base du langage PL/SQL d’Oracle pour les créer et les utiliser efficacement.


Autres exemples de fonctions perso

  1. Fonction de conversion de température (CelsiusVersFahrenheit) :
CREATE OR REPLACE FUNCTION CelsiusVersFahrenheit (celsius IN NUMBER)
RETURN NUMBER
IS
  v_fahrenheit NUMBER;
BEGIN
  v_fahrenheit := (celsius * 9/5) + 32;
  RETURN v_fahrenheit;
END CelsiusVersFahrenheit;
  1. Fonction de génération de numéro d’employé unique (GenererNumeroEmploye) :
CREATE OR REPLACE FUNCTION GenererNumeroEmploye
RETURN NUMBER
IS
  v_numero NUMBER;
BEGIN
  SELECT ma_sequence.NEXTVAL INTO v_numero FROM dual;
  RETURN v_numero;
END GenererNumeroEmploye;
  1. Fonction de concaténation de chaînes avec un séparateur personnalisé (ConcatenerAvecSeparateur) :
CREATE OR REPLACE FUNCTION ConcatenerAvecSeparateur (
  liste_en IN VARCHAR2,
  separateur IN VARCHAR2
)
RETURN VARCHAR2
IS
  v_resultat VARCHAR2(4000);
BEGIN
  -- Logique de concaténation ici
  -- Exemple : Supposons que les valeurs soient séparées par des virgules
  SELECT LISTAGG(column_value, separateur) WITHIN GROUP (ORDER BY column_value)
  INTO v_resultat
  FROM TABLE(SYS.ODCINUMBERLISTPARSE(liste_en, separateur));

  RETURN v_resultat;
END ConcatenerAvecSeparateur;
  1. Fonction de calcul d’âge à partir de la date de naissance (CalculerAge) :
CREATE OR REPLACE FUNCTION CalculerAge (
  date_naissance IN DATE
)
RETURN NUMBER
IS
  v_age NUMBER;
BEGIN
  v_age := TRUNC(MONTHS_BETWEEN(SYSDATE, date_naissance) / 12);
  RETURN v_age;
END CalculerAge;
  1. Fonction de recherche de la médiane d’un ensemble de valeurs (CalculerMedian) :
CREATE OR REPLACE FUNCTION CalculerMedian (valeurs IN NUMBER_ARRAY)
RETURN NUMBER
IS
  v_median NUMBER;
BEGIN
  -- Tri des valeurs
  SELECT MEDIAN(column_value) INTO v_median
  FROM TABLE(SYS.ODCINUMBERLISTPARSE(valeurs));

  RETURN v_median;
END CalculerMedian;