1) DECLARE
CURSOR c_emp IS
SELECT [Link], [Link], [Link]
FROM livre l, vente v
WHERE v.id_livre = l.id_livre;
v_titre [Link]%TYPE;
v_quantite [Link]%TYPE;
v_prix [Link]%TYPE;
BEGIN
OPEN c_emp;
LOOP
FETCH c_emp INTO v_titre, v_quantite, v_prix;
EXIT WHEN c_emp%NOTFOUND;
DBMS_OUTPUT.PUT_LINE('titre: ' || v_titre ||' | quantite: ' || v_quantite || ' | affaire genere: ' ||
(v_quantite * v_prix));
END LOOP;
CLOSE c_emp;
END;
2)
DECLARE
v_titre [Link]%TYPE;
v_count NUMBER;
BEGIN
SELECT COUNT(*) INTO v_count
FROM livre
WHERE id_livre = 103;
IF v_count = 0 THEN
INSERT INTO livre VALUES (103, 'le petit prince', 20, 1);
DBMS_OUTPUT.PUT_LINE('Livre added.');
ELSE
DBMS_OUTPUT.PUT_LINE('Livre not added it already existe .');
END IF;
END;
DECLARE
v_titre [Link]%TYPE;
v_count NUMBER;
BEGIN
SELECT COUNT(*) INTO v_count
FROM livre
WHERE id_livre = 106;
IF v_count = 0 THEN
INSERT INTO livre VALUES (106, 'le petit prince', 20, 1);
DBMS_OUTPUT.PUT_LINE('Livre added.');
ELSE
DBMS_OUTPUT.PUT_LINE('Livre not added it already existe .');
END IF;
END;
3) CREATE OR REPLACE PROCEDURE ajouter_vente (
p_id_livre IN INT,
p_qantite IN INT,
p_date_vente IN VARCHAR2
) IS
v_count INT;
v_id_vente INT;
BEGIN
SELECT COUNT(*) INTO v_count FROM livre WHERE id_livre = p_id_livre;
IF v_count = 0 THEN
DBMS_OUTPUT.PUT_LINE('Livre n''existe pas.');
ELSE
SELECT NVL(MAX(id_vente), 0) + 1 INTO v_id_vente FROM vente;
INSERT INTO vente (id_vente, id_livre, quantite, date_vente)
VALUES (v_id_vente, p_id_livre, p_qantite, TO_DATE(p_date_vente, 'YYYY-MM-DD'));
DBMS_OUTPUT.PUT_LINE('Vente ajoutée avec succès.');
END IF;
END;
DECLARE
BEGIN
ajouter_vente(103,2,'2004/5/5');
END;
DECLARE
BEGIN
ajouter_vente(108,2,'2004/5/5');
END;
4) CREATE OR REPLACE FUNCTION total_ventes_livre (
p_id_livre IN INT
) RETURN NUMBER IS
v_total NUMBER;
v_count NUMBER;
BEGIN
SELECT COUNT(*) INTO v_count FROM vente WHERE id_livre = p_id_livre;
IF v_count = 0 THEN
RETURN 0;
END IF;
SELECT SUM([Link] * [Link]) INTO v_total
FROM vente v
JOIN livre l ON v.id_livre = l.id_livre
WHERE v.id_livre = p_id_livre;
RETURN v_total;
END;
DECLARE
BEGIN
DBMS_OUTPUT.PUT_LINE(total_ventes_livre (103));
END;
5)
CREATE OR REPLACE TRIGGER test_nega
AFTER INSERT ON livre
FOR EACH ROW
BEGIN
IF :[Link] < 0 THEN
DBMS_OUTPUT.PUT_LINE('le prix négatif.');
END IF;
END.
INSERT INTO livre VALUES (1012, 'test', -20, 1);