Académique Documents
Professionnel Documents
Culture Documents
-- 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;
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
IF numV=v_numPilote THEN
RAISE PB_NUM;
END IF;
IF age<25 THEN
RAISE PB_AGE;
END IF;
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
-- 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;
/
-- 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;
/