0% ont trouvé ce document utile (0 vote)
7 vues14 pages

Création et gestion d'une base de données

Le document décrit la création d'un utilisateur nommé Takou et la mise en place d'une base de données avec plusieurs tables, y compris Clients, Commandes, Lig_commandes, Salaries, Categorie et Articles. Il fournit également des instructions pour l'insertion, la mise à jour et l'extraction de données à l'aide de requêtes SQL et PLSQL. Enfin, des exemples de boucles PLSQL pour afficher des nombres et des nombres premiers sont présentés.

Transféré par

alextakou96
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats DOCX, PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
7 vues14 pages

Création et gestion d'une base de données

Le document décrit la création d'un utilisateur nommé Takou et la mise en place d'une base de données avec plusieurs tables, y compris Clients, Commandes, Lig_commandes, Salaries, Categorie et Articles. Il fournit également des instructions pour l'insertion, la mise à jour et l'extraction de données à l'aide de requêtes SQL et PLSQL. Enfin, des exemples de boucles PLSQL pour afficher des nombres et des nombres premiers sont présentés.

Transféré par

alextakou96
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats DOCX, PDF, TXT ou lisez en ligne sur Scribd

EXERCICE 12

1) Créer un utilisateur Takou


2) Création, insertion et mise a jour des données, extraction des données avec
l’utilisateur précédemment crée.
Clients (N°client, nom, prenom, adresse, ville, pays, phone)
Commandes (N°commande, #N°client, #N°salaire, date_commande, taux,
etat_commande, date_envoi)
Lig_commandes (N°lig_commande, #N°commande, #ref_article,
qte_commande)
Salaries (N°salaire, nom_salarie, prenom_salarie, fonction, salaire, commission)
Categorie (code_categorie, libelle_categorie)
Articles (ref_article, #code_categorie, designation, qte_stock)

SOLUTION
CREATE USER Takou IDENTIFIED BY motdepasse;
GRANT CONNECT, RESOURCE TO Takou;

********Table Clients
CREATE TABLE Clients (
N_client NUMBER PRIMARY KEY,
nom VARCHAR2(50),
prenom VARCHAR2(50),
adresse VARCHAR2(100),
ville VARCHAR2(50),
pays VARCHAR2(50),
phone VARCHAR2(20)
);
************* Table Commandes
CREATE TABLE Commandes (
N_commande NUMBER PRIMARY KEY,
N_client NUMBER REFERENCES Clients(N_client),
N_salaire NUMBER,
date_commande DATE,
taux NUMBER,
etat_commande VARCHAR2(20),
date_envoi DATE
);

***********Table Lig_commandes
CREATE TABLE Lig_commandes (
N_lig_commande NUMBER PRIMARY KEY,
N_commande NUMBER REFERENCES Commandes(N_commande),
ref_article NUMBER,
qte_commande NUMBER
);

***********Table Salaries
CREATE TABLE Salaries (
N_salaire NUMBER PRIMARY KEY,
nom_salarie VARCHAR2(50),
prenom_salarie VARCHAR2(50),
fonction VARCHAR2(50),
salaire NUMBER,
commission NUMBER
);

***********Table Categorie
CREATE TABLE Categorie (
code_categorie NUMBER PRIMARY KEY,
libelle_categorie VARCHAR2(50)
);

**********Table Articles
CREATE TABLE Articles (
ref_article NUMBER PRIMARY KEY,
code_categorie NUMBER REFERENCES Categorie(code_categorie),
designation VARCHAR2(100),
qte_stock NUMBER
);
3. Insertion des données

*********** Insertion dans Clients


INSERT INTO Clients (N_client, nom, prenom, adresse, ville, pays, phone)
VALUES (1, 'Dupont', 'Jean', '123 Rue A', 'Paris', 'France', '0123456789');
INSERT INTO Clients (N_client, nom, prenom, adresse, ville, pays, phone)
VALUES (2, 'Martin', 'Sophie', '456 Rue B', 'Lyon', 'France', '0987654321');
INSERT INTO Clients (N_client, nom, prenom, adresse, ville, pays, phone)
VALUES (3, 'Durand', 'Paul', '789 Rue C', 'Marseille', 'France', '0147852369');
INSERT INTO Clients (N_client, nom, prenom, adresse, ville, pays, phone)
VALUES (4, 'Leroy', 'Alice', '321 Rue D', 'Toulouse', 'France', '0178965432');
INSERT INTO Clients (N_client, nom, prenom, adresse, ville, pays, phone)
VALUES (5, 'Moreau', 'Luc', '654 Rue E', 'Nice', 'France', '0182365478');
INSERT INTO Clients (N_client, nom, prenom, adresse, ville, pays, phone)
VALUES (6, 'Simon', 'Julie', '987 Rue F', 'Lille', 'France', '0198765432');
INSERT INTO Clients (N_client, nom, prenom, adresse, ville, pays, phone)
VALUES (7, 'Fournier', 'Marc', '159 Rue G', 'Nantes', 'France', '0137894562');
INSERT INTO Clients (N_client, nom, prenom, adresse, ville, pays, phone)
VALUES (8, 'Gauthier', 'Claire', '753 Rue H', 'Strasbourg', 'France',
'0165432789');
INSERT INTO Clients (N_client, nom, prenom, adresse, ville, pays, phone)
VALUES (9, 'Roux', 'Emma', '258 Rue I', 'Bordeaux', 'France', '0156789234');
INSERT INTO Clients (N_client, nom, prenom, adresse, ville, pays, phone)
VALUES (10, 'Blanc', 'Pierre', '369 Rue J', 'Lyon', 'France', '0123456780');

*********** Insertion dans Salaries


INSERT INTO Salaries (N_salaire, nom_salarie, prenom_salarie, fonction,
salaire, commission) VALUES (1, 'Bernard', 'Luc', 'Vendeur', 30000, 5) ;
INSERT INTO Salaries (N_salaire, nom_salarie, prenom_salarie, fonction,
salaire, commission) VALUES (2, 'Leroy', 'Anne', 'Manager', 50000, 10) ;
INSERT INTO Salaries (N_salaire, nom_salarie, prenom_salarie, fonction,
salaire, commission) VALUES (3, 'Martin', 'Julien', 'Directeur', 70000, 15) ;
INSERT INTO Salaries (N_salaire, nom_salarie, prenom_salarie, fonction,
salaire, commission) VALUES (4, 'Bernier', 'Sophie', 'Secrétaire', 25000, 3) ;
INSERT INTO Salaries (N_salaire, nom_salarie, prenom_salarie, fonction,
salaire, commission) VALUES (5, 'Lemoine', 'Paul', 'Technicien', 40000, 7) ;
INSERT INTO Salaries (N_salaire, nom_salarie, prenom_salarie, fonction,
salaire, commission) VALUES (6, 'Perrin', 'Marie', 'Assistant', 22000, 2) ;
INSERT INTO Salaries (N_salaire, nom_salarie, prenom_salarie, fonction,
salaire, commission) VALUES (7, 'Lefevre', 'Nico', 'Ingénieur', 60000, 12) ;
INSERT INTO Salaries (N_salaire, nom_salarie, prenom_salarie, fonction,
salaire, commission) VALUES (8, 'Faure', 'Alice', 'Comptable', 35000, 6) ;
INSERT INTO Salaries (N_salaire, nom_salarie, prenom_salarie, fonction,
salaire, commission) VALUES (9, 'Guerin', 'David', 'Analyste', 45000, 5) ;
INSERT INTO Salaries (N_salaire, nom_salarie, prenom_salarie, fonction,
salaire, commission) VALUES (10, 'Brun', 'Eva', 'Directeur', 80000, 20) ;
********** Insertion dans Categorie
INSERT INTO Categorie (code_categorie, libelle_categorie) VALUES (1,
'Electroménager') ;
INSERT INTO Categorie (code_categorie, libelle_categorie) VALUES (2,
'Informatique') ;
INSERT INTO Categorie (code_categorie, libelle_categorie) VALUES (3,
'Mobilier') ;
INSERT INTO Categorie (code_categorie, libelle_categorie) VALUES (4,
'Vêtements') ;
INSERT INTO Categorie (code_categorie, libelle_categorie) VALUES (5,
'Jouets') ;
INSERT INTO Categorie (code_categorie, libelle_categorie) VALUES (6,
'Livres') ;
INSERT INTO Categorie (code_categorie, libelle_categorie) VALUES (7,
'Alimentaire') ;
INSERT INTO Categorie (code_categorie, libelle_categorie) VALUES (8,
'Sport') ;
INSERT INTO Categorie (code_categorie, libelle_categorie) VALUES (9,
'Automobile') ;
INSERT INTO Categorie (code_categorie, libelle_categorie) VALUES (10,
'Beauté') ;

*********Insertion dans Articles


INSERT INTO Articles (ref_article, code_categorie, designation, qte_stock)
VALUES (1, 1, 'Réfrigérateur', 10) ;
INSERT INTO Articles (ref_article, code_categorie, designation, qte_stock)
VALUES (2, 2, 'Ordinateur', 5) ;
INSERT INTO Articles (ref_article, code_categorie, designation, qte_stock)
VALUES (3, 3, 'Table', 15) ;
INSERT INTO Articles (ref_article, code_categorie, designation, qte_stock)
VALUES (4, 4, 'Pantalon', 20) ;
INSERT INTO Articles (ref_article, code_categorie, designation, qte_stock)
VALUES (5, 5, 'Jouet en bois', 30) ;
INSERT INTO Articles (ref_article, code_categorie, designation, qte_stock)
VALUES (6, 6, 'Roman', 25) ;
INSERT INTO Articles (ref_article, code_categorie, designation, qte_stock)
VALUES (7, 7, 'Pâtes', 40) ;
INSERT INTO Articles (ref_article, code_categorie, designation, qte_stock)
VALUES (8, 8, 'Ballon de football', 12) ;
INSERT INTO Articles (ref_article, code_categorie, designation, qte_stock)
VALUES (9, 9, 'Voiture miniature', 8) ;
INSERT INTO Articles (ref_article, code_categorie, designation, qte_stock)
VALUES (10, 10, 'Crème hydratante', 18) ;

********Insérer dans commande


INSERT INTO Commandes (N_commande, N_client, N_salaire,
date_commande, taux, etat_commande, date_envoi) VALUES (1, 1, 1,
SYSDATE, 20, 'En cours', NULL);
INSERT INTO Commandes (N_commande, N_client, N_salaire,
date_commande, taux, etat_commande, date_envoi) VALUES (2, 2, 2,
SYSDATE, 15, 'Livré', SYSDATE);
INSERT INTO Commandes (N_commande, N_client, N_salaire,
date_commande, taux, etat_commande, date_envoi) VALUES (3, 3, 1,
SYSDATE, 10, 'Annulé', NULL);
INSERT INTO Commandes (N_commande, N_client, N_salaire,
date_commande, taux, etat_commande, date_envoi) VALUES (4, 4, 3,
SYSDATE, 25, 'En cours', NULL);
INSERT INTO Commandes (N_commande, N_client, N_salaire,
date_commande, taux, etat_commande, date_envoi) VALUES (5, 5, 4,
SYSDATE, 30, 'Livré', SYSDATE);
INSERT INTO Commandes (N_commande, N_client, N_salaire,
date_commande, taux, etat_commande, date_envoi) VALUES (6, 6, 5,
SYSDATE, 20, 'En attente', NULL);
INSERT INTO Commandes (N_commande, N_client, N_salaire,
date_commande, taux, etat_commande, date_envoi) VALUES (7, 7, 6,
SYSDATE, 18, 'Livré', SYSDATE);
INSERT INTO Commandes (N_commande, N_client, N_salaire,
date_commande, taux, etat_commande, date_envoi) VALUES (8, 8, 7,
SYSDATE, 22, 'En cours', NULL);
INSERT INTO Commandes (N_commande, N_client, N_salaire,
date_commande, taux, etat_commande, date_envoi) VALUES (9, 9, 8,
SYSDATE, 19, 'Annulé', NULL);
INSERT INTO Commandes (N_commande, N_client, N_salaire,
date_commande, taux, etat_commande, date_envoi) VALUES (10, 10, 9,
SYSDATE, 17, 'Livré', SYSDATE);
3. Insertion des données dans Lig_commandes

************ Insertion dans Lig_commandes


INSERT INTO Lig_commandes (N_lig_commande, N_commande,
ref_arcticle, qte_commande) VALUES (1, 1, 1, 2) ;
INSERT INTO Lig_commandes (N_lig_commande, N_commande,
ref_arcticle, qte_commande) VALUES (2, 2, 2, 1) ;
INSERT INTO Lig_commandes (N_lig_commande, N_commande,
ref_arcticle, qte_commande) VALUES (3, 3, 3, 4) ;
INSERT INTO Lig_commandes (N_lig_commande, N_commande,
ref_arcticle, qte_commande) VALUES (4, 4, 4, 5) ;
INSERT INTO Lig_commandes (N_lig_commande, N_commande,
ref_arcticle, qte_commande) VALUES (5, 5, 5, 3) ;
INSERT INTO Lig_commandes (N_lig_commande, N_commande,
ref_arcticle, qte_commande) VALUES (6, 6, 6, 2) ;
INSERT INTO Lig_commandes (N_lig_commande, N_commande,
ref_arcticle, qte_commande) VALUES (7, 7, 7, 1) ;
INSERT INTO Lig_commandes (N_lig_commande, N_commande,
ref_arcticle, qte_commande) VALUES (8, 8, 8, 6) ;
INSERT INTO Lig_commandes (N_lig_commande, N_commande,
ref_arcticle, qte_commande) VALUES (9, 9, 9, 4) ;
INSERT INTO Lig_commandes (N_lig_commande, N_commande,
ref_arcticle, qte_commande) VALUES (10, 10, 10, 5);

MISE A JOUR

Mise à jour des données


Voici quelques exemples de mises à jour :

******** Mettre à jour l'état de la commande 1


UPDATE Commandes SET etat_commande = 'Livré' WHERE N_commande
= 1;

***** Mettre à jour le taux de la commande 5


UPDATE Commandes SET taux = 35 WHERE N_commande = 5;

******** Mettre à jour la quantité commandée dans Lig_commandes pour la


commande 2
UPDATE Lig_commandes SET qte_commande = 3 WHERE
N_lig_commande = 2;

4. Extraction des données


Pour extraire des données, on peut utiliser des requêtes SELECT :

SET SERVEROUTPUT ON ;

****** Afficher tous les clients


BEGIN
FOR rec IN (SELECT * FROM Clients) LOOP
DBMS_OUTPUT.PUT_LINE (rec.N_client || ' - ' || [Link] || ' ' ||
[Link]);
END LOOP;
END ;

*******Afficher toutes les commandes


BEGIN
FOR rec IN (SELECT * FROM Commandes) LOOP
DBMS_OUTPUT.PUT_LINE (rec.N_commande || ' - Client : ' ||
rec.N_client || ' - Date : ' || rec.date_commande) ;
END LOOP;
END ;

****** Afficher les détails des commandes avec les clients


BEGIN
FOR rec IN (SELECT [Link], [Link], co.date_commande,
co.etat_commande
FROM Commandes co
JOIN Clients c ON co.N_client = c.N_client) LOOP
DBMS_OUTPUT.PUT_LINE ('Client : ' || [Link] || ' ' || [Link] || ' -
Date de commande : ' || rec.date_commande || ' - État: ' || rec.etat_commande);
END LOOP;
END;

EXERCICE 2 : PLSQL
a) Afficher les nombres par PAS de 10

BEGIN
FOR i IN 0 .. 100 LOOP
DBMS_OUTPUT.PUT_LINE(i * 10);
END LOOP;
END;
b) Afficher les nombres compris entre 10 et 20

BEGIN
FOR i IN 10 .. 20 LOOP
DBMS_OUTPUT.PUT_LINE(i);
END LOOP;
END;
2. Afficher les nombres premiers compris entre 2 et 50

DECLARE
is_prime BOOLEAN;
BEGIN
FOR num IN 2 .. 50 LOOP
is_prime := TRUE;
FOR i IN 2 .. TRUNC(SQRT(num)) LOOP
IF num MOD i = 0 THEN
is_prime := FALSE;
EXIT; -- Sortir de la boucle interne
END IF;
END LOOP;
IF is_prime THEN
DBMS_OUTPUT.PUT_LINE(num);
END IF;
END LOOP;
END;
3. Afficher les tables de multiplication de 2 à 6

BEGIN
FOR i IN 2 .. 6 LOOP
DBMS_OUTPUT.PUT_LINE('Table de ' || i || ':');
FOR j IN 1 .. 10 LOOP
DBMS_OUTPUT.PUT_LINE(i || ' * ' || j || ' = ' || (i * j));
END LOOP;
DBMS_OUTPUT.PUT_LINE(''); -- Ligne vide pour séparer les tables
END LOOP;
END;
4. Procédure qui affiche le MINIMUM entre deux nombres

CREATE OR REPLACE PROCEDURE min_value(a IN NUMBER, b IN


NUMBER) IS
BEGIN
IF a < b THEN
DBMS_OUTPUT.PUT_LINE('Minimum: ' || a);
ELSE
DBMS_OUTPUT.PUT_LINE('Minimum: ' || b);
END IF;
END;
5. Fonction qui affiche le MAXIMUM entre deux nombres

CREATE OR REPLACE FUNCTION max_value(a IN NUMBER, b IN


NUMBER) RETURN NUMBER IS
BEGIN
RETURN CASE
WHEN a > b THEN a
ELSE b
END;
END;
6. Fonction itérative qui calcule la FACTORIELLE d’un nombre

--CREATE OR REPLACE FUNCTION factorial_iterative(n IN


NUMBER) RETURN NUMBER IS
result NUMBER := 1;
BEGIN
FOR i IN 1 .. n LOOP
result := result * i;
END LOOP;
RETURN result;
END;
7. Fonction récursive qui calcule la FACTORIELLE d’un nombre

CREATE OR REPLACE FUNCTION factorial_recursive(n IN NUMBER)


RETURN NUMBER IS
BEGIN
IF n = 0 THEN
RETURN 1;
ELSE
RETURN n * factorial_recursive(n - 1);
END IF;
CREATE OR REPLACE FUNCTION fibonacci_iterative(n IN NUMBER)
RETURN NUMBER IS
a NUMBER := 0; -- U0
b NUMBER := 1; -- U1
result NUMBER;
BEGIN
IF n = 0 THEN
RETURN a;
ELSIF n = 1 THEN
RETURN b;
ELSE
FOR i IN 2 .. n LOOP
result := a + b; -- Un = Un-1 + Un-2
a := b; -- Mettre à jour U0
b := result; -- Mettre à jour U1
END LOOP;
RETURN result;
END IF;
END;
9. Fonction récursive qui calcule la suite de Fibonacci

CREATE OR REPLACE FUNCTION fibonacci_recursive(n IN NUMBER)


RETURN NUMBER IS
BEGIN
IF n = 0 THEN
RETURN 0; -- U0
ELSIF n = 1 THEN
RETURN 1; -- U1
ELSE
RETURN fibonacci_recursive(n - 1) + fibonacci_recursive(n - 2); -- Un =
Un-1 + Un-2
END IF;
END;
Utilisation des fonctions
Pour utiliser ces fonctions et afficher les résultats, vous pouvez exécuter des
requêtes comme suit :
SET SERVEROUTPUT ON;

DECLARE
result NUMBER;
BEGIN
-- Exemple d'utilisation de la fonction itérative
result := fibonacci_iterative(10);
DBMS_OUTPUT.PUT_LINE('Fibonacci (itératif) pour n=10: ' || result);

-- Exemple d'utilisation de la fonction récursive


result := fibonacci_recursive(10);
DBMS_OUTPUT.PUT_LINE('Fibonacci (récursif) pour n=10: ' || result);
END;

Vous aimerez peut-être aussi