Compte rendu BDA 3
captures:
contenus initiaux des tables:
verification
Ex2 :
a)
b)
Ex3 :
script pl/sql mode:
-- Exercice 1 : Procédure et Bloc Anonyme
-- a) Procédure GET_Prix_et_qte
CREATE OR REPLACE PROCEDURE GET_Prix_et_qte (p_codart IN
Article.codart%TYPE) AS
v_prix_unitaire Article.prixunit%TYPE;
v_quantite_en_stock Article.qtestck%TYPE;
BEGIN
SELECT prixunit, qtestck
INTO v_prix_unitaire, v_quantite_en_stock
FROM Article
WHERE codart = p_codart;
DBMS_OUTPUT.PUT_LINE('Prix unitaire: ' || v_prix_unitaire);
DBMS_OUTPUT.PUT_LINE('Quantité en stock: ' || v_quantite_en_stock);
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('L’article n’existe pas.');
END;
-- b) Bloc PL/SQL Anonyme
DECLARE
v_codart Article.codart%TYPE;
BEGIN
-- Accepter l'entrée de l'utilisateur
v_codart := :Enter_Codart;
-- Appeler la procédure
GET_Prix_et_qte(v_codart);
END;
-- Exercice 2 : Ajout de colonne et Blocs PL/SQL
-- Partie SQL : Ajouter la colonne NbreCdes
ALTER TABLE Client
ADD NbreCdes NUMBER DEFAULT 0;
-- a) Bloc PL/SQL Anonyme
DECLARE
v_codclt Client.codclt%TYPE;
v_nbre_cdes NUMBER;
BEGIN
v_codclt :=:Enter_Codclt;
SELECT COUNT(*)
INTO v_nbre_cdes
FROM Commande
WHERE codclt = v_codclt;
UPDATE Client
SET NbreCdes = v_nbre_cdes
WHERE codclt = v_codclt;
END;
-- b) Déclencheur Trigger_MAJ_NbreCdes
CREATE OR REPLACE TRIGGER Trigger_MAJ_NbreCdes
AFTER INSERT OR DELETE ON Commande
FOR EACH ROW
BEGIN
IF INSERTING THEN
UPDATE Client
SET NbreCdes = NbreCdes + 1
WHERE codclt = :NEW.codclt;
ELSIF DELETING THEN
UPDATE Client
SET NbreCdes = NbreCdes - 1
WHERE codclt = :OLD.codclt;
END IF;
END;
-- Exercice 3 : Déclencheur pour la vérification des couleurs
CREATE OR REPLACE TRIGGER TriggerVerifCouleur
BEFORE INSERT OR UPDATE ON Article
FOR EACH ROW
BEGIN
IF :NEW.couleur NOT IN ('rouge', 'vert', 'bleu', 'noir') THEN
RAISE_APPLICATION_ERROR(-20001, 'Couleur invalide. Choisissez parmi : rouge,
vert, bleu, noir.');
END IF;
END;