{"id":690,"date":"2023-10-01T08:10:06","date_gmt":"2023-10-01T12:10:06","guid":{"rendered":"https:\/\/ve2cuy.com\/?page_id=690"},"modified":"2024-09-18T10:08:28","modified_gmt":"2024-09-18T14:08:28","slug":"420-5d5-bd-les-fonctions","status":"publish","type":"page","link":"https:\/\/ve2cuy.com\/index.php\/420-5d5-bd-les-fonctions\/","title":{"rendered":"420-5D5 : BD &#8211; Les fonctions"},"content":{"rendered":"\n<p>Les fonctions dans une base de donn\u00e9es sont des objets SQL qui effectuent des op\u00e9rations sur les donn\u00e9es stock\u00e9es dans la base de donn\u00e9es et renvoient un r\u00e9sultat. Elles sont utilis\u00e9es pour effectuer des calculs, des transformations de donn\u00e9es et des manipulations sur les donn\u00e9es stock\u00e9es, ce qui les rend extr\u00eamement utiles pour simplifier les requ\u00eates, g\u00e9n\u00e9rer des r\u00e9sultats personnalis\u00e9s et automatiser certaines t\u00e2ches. <\/p>\n\n\n\n<h2 class=\"wp-block-heading\">1 &#8211; Fonctions int\u00e9gr\u00e9es au SGBD<\/h2>\n\n\n\n<p>Voici quelques-unes des fonctions couramment utilis\u00e9es dans Oracle :<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Fonctions de manipulation de cha\u00eenes de caract\u00e8res<\/strong> :<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>CONCAT<\/code> : Combinaison de deux cha\u00eenes de caract\u00e8res.<\/li>\n\n\n\n<li><code>SUBSTR<\/code> : Extraction d&rsquo;une sous-cha\u00eene \u00e0 partir d&rsquo;une cha\u00eene.<\/li>\n\n\n\n<li><code>LENGTH<\/code> : Calcul de la longueur d&rsquo;une cha\u00eene de caract\u00e8res.<\/li>\n<\/ul>\n\n\n\n<p>Exemple :<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">SELECT CONCAT(Prenom, ' ', Nom) AS NomComplet FROM Employes;<\/pre>\n\n\n\n<ol class=\"wp-block-list\" start=\"2\">\n<li><strong>Fonctions de conversion de donn\u00e9es<\/strong> :<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>TO_NUMBER<\/code> : Conversion d&rsquo;une cha\u00eene de caract\u00e8res en nombre.<\/li>\n\n\n\n<li><code>TO_DATE<\/code> : Conversion d&rsquo;une cha\u00eene de caract\u00e8res en date.<\/li>\n<\/ul>\n\n\n\n<p>Exemple :<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">SELECT TO_NUMBER(Salaire) * 12 AS SalaireAnnuel FROM Employes;<\/pre>\n\n\n\n<ol class=\"wp-block-list\" start=\"3\">\n<li><strong>Fonctions math\u00e9matiques<\/strong> :<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>ROUND<\/code> : Arrondissement d&rsquo;un nombre \u00e0 une pr\u00e9cision donn\u00e9e.<\/li>\n\n\n\n<li><code>SUM<\/code> : Calcul de la somme des valeurs d&rsquo;une colonne.<\/li>\n<\/ul>\n\n\n\n<p>Exemple :<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">SELECT ROUND(Salaire, 2) AS SalaireArrondi FROM Employes;\nSELECT SUM(Salaire) AS SommeSalaire FROM Employes;<\/pre>\n\n\n\n<ol class=\"wp-block-list\" start=\"4\">\n<li><strong>Fonctions de date et d&rsquo;heure<\/strong> :<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>SYSDATE<\/code> : R\u00e9cup\u00e9ration de la date et de l&rsquo;heure syst\u00e8me.<\/li>\n\n\n\n<li><code>MONTHS_BETWEEN<\/code> : Calcul du nombre de mois entre deux dates.<\/li>\n<\/ul>\n\n\n\n<p>Exemple :<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">SELECT SYSDATE AS DateActuelle FROM dual;\nSELECT MONTHS_BETWEEN(DateEmbauche, SYSDATE) AS MoisAnciennete FROM Employes;<\/pre>\n\n\n\n<ol class=\"wp-block-list\" start=\"5\">\n<li><strong>Fonctions de regroupement et d&rsquo;agr\u00e9gation<\/strong> :<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>AVG<\/code> : Calcul de la moyenne d&rsquo;une colonne.<\/li>\n\n\n\n<li><code>COUNT<\/code> : Comptage des lignes d&rsquo;un ensemble de r\u00e9sultats.<\/li>\n\n\n\n<li><code>MAX<\/code> : Recherche de la valeur maximale d&rsquo;une colonne.<\/li>\n\n\n\n<li><code>MIN<\/code> : Recherche de la valeur minimale d&rsquo;une colonne.<\/li>\n<\/ul>\n\n\n\n<p>Exemple :<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">SELECT AVG(Salaire) AS SalaireMoyen FROM Employes;\nSELECT COUNT(*) AS NombreEmployes FROM Employes WHERE Departement = 'Ventes';<\/pre>\n\n\n\n<ol class=\"wp-block-list\" start=\"6\">\n<li><strong>Fonctions de conversion de casse<\/strong> :<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>UPPER<\/code> : Conversion en majuscules.<\/li>\n\n\n\n<li><code>LOWER<\/code> : Conversion en minuscules.<\/li>\n<\/ul>\n\n\n\n<p>Exemple :<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">SELECT UPPER(Nom) AS NomMajuscules FROM Employes;\nSELECT LOWER(Prenom) AS PrenomMinuscules FROM Employes;<\/pre>\n\n\n\n<ol class=\"wp-block-list\" start=\"7\">\n<li><strong>Fonctions de gestion de NULL<\/strong> :<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>NVL<\/code> : Remplacement de valeurs NULL par une valeur par d\u00e9faut.<\/li>\n<\/ul>\n\n\n\n<p>Exemple :<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">SELECT NVL(Email, 'Non sp\u00e9cifi\u00e9') AS AdresseEmail FROM Employes;<\/pre>\n\n\n\n<p>Les fonctions Oracle sont puissantes et flexibles, et elles peuvent \u00eatre utilis\u00e9es dans les clauses SELECT, WHERE, HAVING, ORDER BY, et d&rsquo;autres parties des requ\u00eates SQL pour manipuler et pr\u00e9senter les donn\u00e9es de mani\u00e8re appropri\u00e9e pour les besoins de l&rsquo;application.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">2 &#8211; Fonctions de l&rsquo;utilisateur<\/h2>\n\n\n\n<p>Les fonctions de l&rsquo;utilisateur (ou \u00ab\u00a0user-defined functions\u00a0\u00bb en anglais) dans Oracle sont des fonctions personnalis\u00e9es que vous pouvez cr\u00e9er pour effectuer des op\u00e9rations sp\u00e9cifiques sur les donn\u00e9es dans votre base de donn\u00e9es. Contrairement aux fonctions int\u00e9gr\u00e9es d&rsquo;Oracle que nous avons discut\u00e9es pr\u00e9c\u00e9demment, les fonctions de l&rsquo;utilisateur sont des fonctions personnalis\u00e9es que vous cr\u00e9ez pour r\u00e9pondre \u00e0 des besoins sp\u00e9cifiques de votre application. Voici comment vous pouvez cr\u00e9er et utiliser des fonctions de l&rsquo;utilisateur dans Oracle :<\/p>\n\n\n\n<p><strong>Cr\u00e9ation d&rsquo;une fonction de l&rsquo;utilisateur<\/strong> :<\/p>\n\n\n\n<p>Pour cr\u00e9er une fonction de l&rsquo;utilisateur dans Oracle, vous devez utiliser le langage PL\/SQL (Procedural Language\/Structured Query Language). Voici un exemple de cr\u00e9ation d&rsquo;une fonction de l&rsquo;utilisateur qui calcule le carr\u00e9 d&rsquo;un nombre :<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">CREATE OR REPLACE FUNCTION CalculerCarre (n IN NUMBER)\nRETURN NUMBER\nIS\nBEGIN\n  RETURN n * n;\nEND CalculerCarre;<\/pre>\n\n\n\n<p>Dans cet exemple, la fonction \u00ab\u00a0CalculerCarre\u00a0\u00bb prend un argument \u00ab\u00a0n\u00a0\u00bb de type NUMBER et renvoie le carr\u00e9 de \u00ab\u00a0n\u00a0\u00bb en utilisant la clause \u00ab\u00a0RETURN\u00a0\u00bb.<\/p>\n\n\n\n<p><strong>Utilisation d&rsquo;une fonction de l&rsquo;utilisateur<\/strong> :<\/p>\n\n\n\n<p>Apr\u00e8s avoir cr\u00e9\u00e9 une fonction de l&rsquo;utilisateur, vous pouvez l&rsquo;utiliser dans vos requ\u00eates SQL comme n&rsquo;importe quelle autre fonction. Voici un exemple d&rsquo;utilisation de la fonction \u00ab\u00a0CalculerCarre\u00a0\u00bb :<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">-- Utilisation de la fonction dans une requ\u00eate SELECT\nSELECT CalculerCarre(5) AS CarreDeCinq FROM dual;\n\n-- Utilisation de la fonction dans une mise \u00e0 jour\nUPDATE Employes SET Salaire = CalculerCarre(Salaire) WHERE Departement = 'Ventes';<\/pre>\n\n\n\n<p>Dans cet exemple, nous utilisons la fonction \u00ab\u00a0CalculerCarre\u00a0\u00bb pour calculer le carr\u00e9 de 5 et pour mettre \u00e0 jour les salaires des employ\u00e9s en utilisant cette fonction.<\/p>\n\n\n\n<p>Les fonctions de l&rsquo;utilisateur offrent une grande flexibilit\u00e9 car vous pouvez les personnaliser pour r\u00e9pondre \u00e0 des besoins sp\u00e9cifiques de votre application. Cependant, elles n\u00e9cessitent une connaissance de base du langage PL\/SQL d&rsquo;Oracle pour les cr\u00e9er et les utiliser efficacement.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Autres exemples de fonctions perso<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Fonction de conversion de temp\u00e9rature (CelsiusVersFahrenheit)<\/strong> :<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">CREATE OR REPLACE FUNCTION CelsiusVersFahrenheit (celsius IN NUMBER)\nRETURN NUMBER\nIS\n  v_fahrenheit NUMBER;\nBEGIN\n  v_fahrenheit := (celsius * 9\/5) + 32;\n  RETURN v_fahrenheit;\nEND CelsiusVersFahrenheit;<\/pre>\n\n\n\n<ol class=\"wp-block-list\" start=\"2\">\n<li><strong>Fonction de g\u00e9n\u00e9ration de num\u00e9ro d&#8217;employ\u00e9 unique (GenererNumeroEmploye)<\/strong> :<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">CREATE OR REPLACE FUNCTION GenererNumeroEmploye\nRETURN NUMBER\nIS\n  v_numero NUMBER;\nBEGIN\n  SELECT ma_sequence.NEXTVAL INTO v_numero FROM dual;\n  RETURN v_numero;\nEND GenererNumeroEmploye;<\/pre>\n\n\n\n<ol class=\"wp-block-list\" start=\"3\">\n<li><strong>Fonction de concat\u00e9nation de cha\u00eenes avec un s\u00e9parateur personnalis\u00e9 (ConcatenerAvecSeparateur)<\/strong> :<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">CREATE OR REPLACE FUNCTION ConcatenerAvecSeparateur (\n  liste_en IN VARCHAR2,\n  separateur IN VARCHAR2\n)\nRETURN VARCHAR2\nIS\n  v_resultat VARCHAR2(4000);\nBEGIN\n  -- Logique de concat\u00e9nation ici\n  -- Exemple : Supposons que les valeurs soient s\u00e9par\u00e9es par des virgules\n  SELECT LISTAGG(column_value, separateur) WITHIN GROUP (ORDER BY column_value)\n  INTO v_resultat\n  FROM TABLE(SYS.ODCINUMBERLISTPARSE(liste_en, separateur));\n\n  RETURN v_resultat;\nEND ConcatenerAvecSeparateur;<\/pre>\n\n\n\n<ol class=\"wp-block-list\" start=\"4\">\n<li><strong>Fonction de calcul d&rsquo;\u00e2ge \u00e0 partir de la date de naissance (CalculerAge)<\/strong> :<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">CREATE OR REPLACE FUNCTION CalculerAge (\n  date_naissance IN DATE\n)\nRETURN NUMBER\nIS\n  v_age NUMBER;\nBEGIN\n  v_age := TRUNC(MONTHS_BETWEEN(SYSDATE, date_naissance) \/ 12);\n  RETURN v_age;\nEND CalculerAge;<\/pre>\n\n\n\n<ol class=\"wp-block-list\" start=\"5\">\n<li><strong>Fonction de recherche de la m\u00e9diane d&rsquo;un ensemble de valeurs (CalculerMedian)<\/strong> :<\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">CREATE OR REPLACE FUNCTION CalculerMedian (valeurs IN NUMBER_ARRAY)\nRETURN NUMBER\nIS\n  v_median NUMBER;\nBEGIN\n  -- Tri des valeurs\n  SELECT MEDIAN(column_value) INTO v_median\n  FROM TABLE(SYS.ODCINUMBERLISTPARSE(valeurs));\n\n  RETURN v_median;\nEND CalculerMedian;<\/pre>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Les fonctions dans une base de donn\u00e9es sont des objets SQL qui effectuent des op\u00e9rations sur les donn\u00e9es stock\u00e9es dans la base de donn\u00e9es et renvoient un r\u00e9sultat. Elles sont utilis\u00e9es pour effectuer des calculs, des transformations de donn\u00e9es et des manipulations sur les donn\u00e9es stock\u00e9es, ce qui les rend extr\u00eamement utiles pour simplifier les [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-690","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/ve2cuy.com\/index.php\/wp-json\/wp\/v2\/pages\/690","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ve2cuy.com\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/ve2cuy.com\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/ve2cuy.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/ve2cuy.com\/index.php\/wp-json\/wp\/v2\/comments?post=690"}],"version-history":[{"count":1,"href":"https:\/\/ve2cuy.com\/index.php\/wp-json\/wp\/v2\/pages\/690\/revisions"}],"predecessor-version":[{"id":691,"href":"https:\/\/ve2cuy.com\/index.php\/wp-json\/wp\/v2\/pages\/690\/revisions\/691"}],"wp:attachment":[{"href":"https:\/\/ve2cuy.com\/index.php\/wp-json\/wp\/v2\/media?parent=690"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}