Oracle PL/SQL - Exemple de fonction CREATE

Cet article vous aidera à comprendre comment créer une fonction définie par l’utilisateur. On l’appelle également fonction enregistrée ou fonction utilisateur.

  1. Les fonctions définies par l’utilisateur sont similaires aux procédures. La seule différence

est cette fonction renvoie toujours une valeur.

  1. Les fonctions définies par l’utilisateur peuvent être utilisées dans le cadre d’une expression SQL.

1. Fonction - Obtenir une adresse formatée

Dans cet exemple, nous allons créer une fonction pour obtenir une adresse formatée en donnant le nom de la personne.

1.1 Créer des tables et des fonctions.

-- creating table person__info

CREATE TABLE personne__info
(
  PERSON__ID numéro (5) clé primaire,
  FIRST__NAME varchar2 (20),
  LAST__NAME varchar2 (20)
)
--creating table person__address__details

CREATE TABLE person__address__details
(
  PERSON__ADDRESS__ID number(5) primary key,
  PERSON__ID number(5) references person__info(person__id),
  CITY varchar2(15),
  STATE varchar2(15),
  COUNTRY varchar2(20),
  ZIP__CODE varchar2(10)
);
--creating function get__complete__address

créer ou remplacer FUNCTION get__complete__address (in__person__id IN NUMBER) RETURN VARCHAR2 IS person__details VARCHAR2 (130);

COMMENCER

SELECT 'Nom-' || person.first__name || ' '|| person.last__name || ', Ville-' || address.city || ', Etat-' || address.state || ', Pays-' || address.country || ', Code postal-' || address.zip__code IN person__details DE person__info person, person__address__details address WHERE personne .person__id = in__person__id AND address.person__id = person.person__id;

RETURN (personne__détails);

END get__complete__address;

1.2 Insérer des données pour les tests.

INSERT IN person__info VALUES (10, 'Luis', 'Thomas'); INSERT IN person__info VALUES (20, 'Wang', 'Moris');

INSERT INTO person__address__details VALUES (101,10, 'Vegas', 'Nevada', 'US', '88901');
INSERT INTO person__address__details VALUES (102,20, 'Carson', 'Nevada', 'US', '90220');

1.3 Afficher les données.

sélectionnez **  parmi PERSON__INFO;

[cols = ",,", options = "en-tête",]| ================================ | PERSON ID | FIRST NAME | LAST__NAME | 10 | Luis | Thomas | 20 | Wang | Moris | ================================

sélectionnez **  parmi PERSON__ADDRESS__DETAILS;

[cols = ",,,,,", options = "en-tête",]| ============================================== =========== | PERSON ADDRESS ID | PERSON ID | VILLE | ÉTAT | PAYS | ZIP CODE | 101 | 10 | Vegas | Nevada | US | 88901 | 102 | 20 | Carson | Nevada | US | 90220 | ============================================== ===========

1.4 Appel de la fonction. Nous pouvons appeler la fonction de plusieurs manières. Ici d’abord nous l’appellera dans l’instruction SELECT . Et ensuite nous l’appellerons de dbms output.put line

SELECT get__complete__address (10) AS "Adresse de la personne" FROM DUAL;

-- output
-- Name-Luis Thomas, City-Vegas, State-Nevada, Country-US, ZIP Code-88901
SET SERVEROUTPUT ON; EXECUTE dbms__output.put__line (get__complete__address (20));

-- output
-- Name-Wang Moris, City-Carson, State-Nevada, Country-US, ZIP Code-90220

2. Function – Check Palindrome String

In this example, we will create a function to check whether a given string is palindrome or not.

Un palindrome est un mot, une phrase, un nombre ou une autre séquence de caractères qui lit le même en arrière que en avant, tels que madame ou voiture de course.
https://en.wikipedia.org/wiki/Palindrome

2.1 Création de la fonction.

CRÉER OU REMPLACER UNE FONCTION checkForPalindrome (inputString VARCHAR2) RETURN VARCHAR2 IS résultat VARCHAR2 (75); ReverseChaîne VARCHAR2 (50); BEGIN SELECT REVERSE (inputString) INTO reverseCtring FROM DUAL; - Utiliser UPPER pour ignorer la sensibilité à la casse.

IF UPPER (inputString) = UPPER (reverseString)
      PUIS
      RETURN (inputString || 'EST un palindrome.');
      FIN SI;
      RETURN (inputString || 'N'EST PAS un palindrome.');
      
    FIN checkForPalindrome;/....

2.2 Appel de la fonction.

SELECT checkForPalindrome ('ORDINATEUR') FROM DUAL; - sortie - L’ORDINATEUR N’EST PAS un palindrome.

SELECT checkForPalindrome ('MAdam') FROM DUAL; - sortie - MAdam EST un palindrome.

SÉLECTIONNER checkForPalindrome ('KANAK') FROM DUAL;

—  Output —  KANAK IS a palindrome.

=== 3. Function – Calculate income tax

In this example, we will create a function to calculate income tax,
assumed tax rate is 30% of all annual income from salary.

3.1 Create tables and function.

--creating table person

CREATE TABLE person ( PERSON__ID number(5) primary key, FULLNAME varchar2(20) );


   

--creating table person salary details

CREATE TABLE person salary details (   Numéro primaire SALARY ID (5),   PERSON ID numéro (5) référence personne (person__id),   Numéro de salaire (8),   MOIS varchar2 (9),   ANNÉE numéro (4) )


   

--creating function

CREATE OR REPLACE FUNCTION calculate__tax(personId NUMBER) RETURN NUMBER IS tax NUMBER(10,2);

BEGIN tax := 0;

SELECT (sum(salary)** 30)/100 INTO tax FROM person__salary__details WHERE person__id = personId;
RETURN tax;

END calculate__tax;

3.2 Insérer les données pour les tests.

INSERT INTO person VALUES (101,'Mark Phile');

INSERT INTO person salary details VALUES (1,101,15000,'JANUARY',2016); INSERT INTO person salary details VALUES (2,101,15000,'FEBRUARY',2016); INSERT INTO person salary details VALUES (3,101,15000,'MARCH',2016); INSERT INTO person salary details VALUES (4,101,18000,'APRIL',2016); INSERT INTO person salary details VALUES (5,101,18000,'MAY',2016); INSERT INTO person salary details VALUES (6,101,18000,'JUNE',2016); INSERT INTO person salary details VALUES (7,101,18000,'JULY',2016); INSERT INTO person salary details VALUES (8,101,18000,'AUGUST',2016); INSERT INTO person salary details VALUES (9,101,18000,'SEPTEMBER',2016); INSERT INTO person salary details VALUES (10,101,18000,'OCTOBER',2016); INSERT INTO person salary details VALUES (11,101,18000,'NOVEMBER',2016); INSERT INTO person salary details VALUES (12,101,18000,'DECEMBER',2016);

3.3 Afficher les données.

select ** from PERSON;

[cols=",",options="header",]

| ================= | PERSON__ID | FULLNAME | 101 | Mark Phile | ==================

select ** from PERSON SALARY DETAILS;

[cols=",,,,",options="header",]

| ===================================== | | SALARY__ID | PERSON__ID | SALAIRE | MOIS | ANNÉE | 1 | 101 | 15000 | JANVIER | 2016 | 2 | 101 | 15000 | FÉVRIER | 2016 | 3 | 101 | 15000 | MARS | 2016 | 4 | 101 | 18000 | AVRIL | 2016 | 5 | 101 | 18000 | MAI | 2016 | 6 | 101 | 18000 | JUIN | 2016 | 7 | 101 | 18000 | JUILLET | 2016 | 8 | 101 | 18000 | AOUT | 2016 | 9 | 101 | 18000 | SEPTEMBRE | 2016 | 10 | 101 | 18000 | OCTOBRE | 2016 | 11 | 101 | 18000 | NOVEMBRE | 2016 | 12 | 101 | 18000 | DÉCEMBRE | 2016 | =========================== ==============

3.4 Appel de la fonction.

SELECT person.fullname, sum(sal.salary) AS AnnualSalary, sal.year,calculate tax(101) AS tax FROM person,person salary details sal WHERE person.person id = 101 and sal.year = 2016 GROUP BY person.fullname, sal.year;

Sortie

[cols=",,,",options="header",]

| =============================== | FULLNAME | ANNUALSALARY | ANNÉE | FISCAL | Mark Phile | 207000 | 2016 | 62100 | =================================

===  Références

. https://docs.oracle.com/cd/B19306__01/server.102/b14200/functions231.htm[User

Fonctions définies: - Documents officiels Oracle]. https://docs.oracle.com/cd/B19306__01/server.102/b14200/statements__5009.htm#i2153260[Create

Fonction: - Documents officiels Oracle]

lien://tag/fonction/[fonction]lien://tag/oracle/[oracle]lien://tag/palindrome/[palindrome]lien://tag/plsql/[plsql]