Vous êtes sur la page 1sur 5

-- Correction By Joberno

CREATE TABLE Pilote(


numPilote number(10),
nom varchar(25),
prenom varchar(25),
sexe varchar(25),
salaire DECIMAL(7,2),
ville varchar(25),
pays varchar(25),
age number(25)
);

CREATE TABLE Avion(


numAvion number(25),
capacite number(25),
type varchar(25)
);

CREATE TABLE Vol(


numPilote number(10),
numAvion number(10),
date_voyage DATE,
ville_depart varchar(55),
ville_arriver varchar(55)
);

-- PRIMARY KEY
ALTER TABLE Pilote ADD CONSTRAINT PK_numPilote PRIMARY KEY(numPilote);
ALTER TABLE Avion ADD CONSTRAINT PK_numAvion PRIMARY KEY(numAvion);

-- FOREIGN KEY
ALTER TABLE Vol ADD CONSTRAINT FK_numPilote FOREIGN KEY(numPilote) REFERENCES
Pilote(numPilote);
ALTER TABLE Vol ADD CONSTRAINT FK_numAvion FOREIGN KEY(numAvion) REFERENCES
Avion(numAvion);

-- INSERTION Pilote
INSERT INTO Pilote VALUES(1,'Joseph','Joberno Birlado','Masculin',9000,'petion-
ville','Haiti',40);
INSERT INTO Pilote
VALUES(2,'Gauthier','Sylainx','Masculin',3000,'thomassick','RD',29);
INSERT INTO Pilote
VALUES(3,'Victor','Christan','Masculin',6000,'delmas','France',39);

-- INSERTION Avion
INSERT INTO Avion VALUES(1,300,'SKY002');
INSERT INTO Avion VALUES(2,500,'SKY004');
INSERT INTO Avion VALUES(3,600,'SKY007');

-- INSERTION Vol
INSERT INTO vol VALUES(1,3,'01/07/2018','kenskoff','Petion-ville');
INSERT INTO vol VALUES(2,3,'07/07/2018','delmas','Tabarre');
INSERT INTO vol VALUES(3,1,'30/07/2018','cap-Haitien','Port-au-prince');
INSERT INTO vol VALUES(1,2,'30/07/2021','thomonde','Port-au-prince');

-- Procedure exo1
SET SERVEROUTPUT ON;

CREATE OR REPLACE PROCEDURE afficher_pilote(v_ville Pilote.ville%TYPE) IS


ville_not_found EXCEPTION;
v_count number:=0;
BEGIN

FOR s IN (SELECT * FROM Pilote WHERE ville=lower(v_ville))


LOOP
DBMS_OUTPUT.PUT_LINE('#'||s.numPilote||' nom : '||s.nom||' prenom :
'||s.prenom||' sexe : '||s.sexe
||' salaire : '||s.salaire||' ville : '||s.ville||' pays : '||s.pays ||' age
: '||s.age);
v_count:=v_count+1;
END LOOP;

IF v_count=0 THEN
RAISE ville_not_found;
END IF;

EXCEPTION
WHEN ville_not_found THEN
DBMS_OUTPUT.PUT_LINE('Ville non trouvé');
END;
/
-- appel a la procedure
execute afficher_pilote('delmas');

-- EXO2
CREATE OR REPLACE PROCEDURE inserer_pilote(
v_numPilote Pilote.numPilote%TYPE,
nom Pilote.nom%TYPE,
prenom Pilote.prenom%TYPE,
sexe Pilote.sexe%TYPE,
salaire Pilote.salaire%TYPE,
ville Pilote.ville%TYPE,
pays Pilote.pays%TYPE,
age Pilote.age%TYPE
) IS
PB_NUM EXCEPTION;
PB_AGE EXCEPTION;
PB_SAL EXCEPTION;
numV Pilote.numPilote%TYPE;
BEGIN

SELECT numPilote INTO numV FROM Pilote WHERE numPilote=v_numPilote;

IF numV=v_numPilote THEN
RAISE PB_NUM;
END IF;

IF age<25 THEN
RAISE PB_AGE;
END IF;

IF salaire<75000 OR salaire>100000 THEN


RAISE PB_SAL;
END IF;

INSERT INTO Pilote VALUES(v_numPilote,nom,prenom,sexe,salaire,ville,pays,age);

EXCEPTION
WHEN PB_NUM THEN
DBMS_OUTPUT.PUT_LINE('LE PILOTE EXISTE DEJA');
WHEN PB_AGE THEN
DBMS_OUTPUT.PUT_LINE('L''age entrer est inferieur a 25ans');
WHEN PB_SAL THEN
DBMS_OUTPUT.PUT_LINE('Le salaire entrer n''est pas compris entre 75000 et 100000');
END;
/
-- appel a la procedure
execute inserer_pilote(1,'Joseph','Joberno Birlado','Masculin',900000,'petion-
ville','Haiti',56);

-- EXO3)
INSERT INTO Avion VALUES(7,600,'SKY007');-- avion libre pour la supression

CREATE OR REPLACE PROCEDURE suprimmer_avion(v_numAvion Avion.numAvion%TYPE) IS


avion_not_found EXCEPTION;
BEGIN
DELETE FROM Avion WHERE numAvion=v_numAvion;
IF SQL%NOTFOUND THEN
RAISE avion_not_found;
ELSE
DBMS_OUTPUT.PUT_LINE('avion numero '||v_numAvion|| ' Suprimmer avec succès');
END IF;
EXCEPTION
WHEN avion_not_found THEN
DBMS_OUTPUT.PUT_LINE('avion de numero '||v_numAvion|| ' introuvable');
END;
/
-- appel a la procedure suprimmer_avion
CALL suprimmer_avion(7);
-- OU
EXECUTE suprimmer_avion(7);

-- EXO4)
CREATE OR REPLACE PROCEDURE modifier_pilote(
v_numPilote Pilote.numPilote%TYPE,
v_nom Pilote.nom%TYPE,
v_prenom Pilote.prenom%TYPE,
v_sexe Pilote.sexe%TYPE,
v_salaire Pilote.salaire%TYPE,
v_ville Pilote.ville%TYPE,
v_pays Pilote.pays%TYPE,
v_age Pilote.age%TYPE
) IS

pilote_not_found EXCEPTION;
BEGIN
UPDATE Pilote SET
nom=v_nom,prenom=v_prenom,sexe=v_sexe,salaire=v_salaire,ville=v_ville,pays=v_pays,ag
e=v_age WHERE numPilote=v_numPilote;

IF SQL%NOTFOUND THEN
RAISE pilote_not_found;
ELSE
DBMS_OUTPUT.PUT_LINE('Pilote modifier avec succès');
END IF;

EXCEPTION
WHEN pilote_not_found THEN
DBMS_OUTPUT.PUT_LINE('avion de numero '||v_numPilote|| ' introuvable');
END;
/

execute modifier_pilote(1,'Joseph','Joberno Birlado','Masculin',55000,'petion-


ville','Haiti',56);

-- EXO5
CREATE OR REPLACE TRIGGER interdir_pilote
BEFORE INSERT OR UPDATE OR DELETE ON Pilote
FOR EACH ROW
BEGIN
IF (TO_CHAR(SYSDATE,'DAY') IN('SAMEDI','DIMANCHE')) OR (TO_CHAR(SYSDATE,'HH24') NOT
BETWEEN '08' AND '16') THEN
IF INSERTING THEN
RAISE_APPLICATION_ERROR(-20001,'INSERTION IMPOSSIBLE');
ELSIF UPDATING ('salaire') THEN
RAISE_APPLICATION_ERROR(-20001,'MODIFICATION IMPOSSIBLE');
ELSIF DELETING THEN
RAISE_APPLICATION_ERROR(-20001,'SUPRESSION IMPOSSIBLE');
ELSE
RAISE_APPLICATION_ERROR(-20001,'MISE A JOUR IMPOSSIBLE');
END IF;

END IF;

END;
/

INSERT INTO Pilote


VALUES(14,'JOSEPH','Joberno','Masculin',6000,'delmas','France',39);

Vous aimerez peut-être aussi