set SERVEROUTPUT on
/*create table tab1(Nombre integer , carre integer);
select *from tab1;
DECLARE
C number;
BEGIN
for c in 1 ..100 loop
insert into tab1 values (C,C*C);
end loop;
END;
create table temp (col1 INTEGER ,col2 INTEGER,col3 VARCHAR(100));
DECLARE
v_index INTEGER :=0;
BEGIN
for c in 1 ..10 loop
v_index:=100*C;
if mod(C,2)=0 THEN
insert into temp values (C,v_index,'pair');
else
insert into temp values (C,v_index,'impair');
end if;
end loop;
SELECT * from temp ;
END;
*/
/*
declare
v_nombre INTEGER := 123456789;
v.chiffre number;
v_pair_count number:=0;
v_impair_count number:=0;
begin
if v_nombre <0 then
DBMS_OUTPUT_LINE('Veuillez entrer nombre positif');
end if;
while v_nombre >0 loop
v_chiffre :=FLOOR(v_nombre,10);
v_nombre :=FLOOR(v_nombre/10);
if mod (v_chiffre,2)=0 then
v_pair_count := v_pair_count +1;
else
v_impair_count :=v_impair_count +1;
end if;
end loop;
DBMS_OUTPUT_LINE("Les nombres paires sont :"||v_pair_count);
DBMS_OUTPUT_LINE("Les nombres impaires sont :"||v_impair_count);
end;
*/
--EX1
SET SERVEROUTPUT ON;
DECLARE
temperature NUMBER;
unit CHAR(1);
converted_temp NUMBER;
BEGIN
temperature := &temperature;
unit := '&unit';
IF UPPER(unit) = 'C' THEN
converted_temp := (temperature * 9 / 5) + 32;
DBMS_OUTPUT.PUT_LINE(temperature || '°C est égal à ' || converted_temp ||
'°F');
ELSIF UPPER(unit) = 'F' THEN
converted_temp := (temperature - 32) * 5 / 9;
DBMS_OUTPUT.PUT_LINE(temperature || '°F est égal à ' || converted_temp ||
'°C');
ELSE
DBMS_OUTPUT.PUT_LINE('This is an invalid scale.');
END IF;
END;
/
--ex2
SET SERVEROUTPUT ON;
--EX2
SET SERVEROUTPUT ON
DECLARE
v_date DATE;
v_jour VARCHAR2(20);
v_num_jour NUMBER;
BEGIN
-- Lire la date au format 'DD-MM-YYYY'
v_date := TO_DATE('29-10-2024', 'DD-MM-YYYY'); -- Remplacez par votre date
d'entrée
-- Extraire le numéro du jour dans la semaine
v_num_jour := TO_CHAR(v_date, 'D');
-- Déterminer le jour correspondant
CASE v_num_jour
WHEN 1 THEN v_jour := 'Dimanche';
WHEN 2 THEN v_jour := 'Lundi';
WHEN 3 THEN v_jour := 'Mardi';
WHEN 4 THEN v_jour := 'Mercredi';
WHEN 5 THEN v_jour := 'Jeudi';
WHEN 6 THEN v_jour := 'Vendredi';
WHEN 7 THEN v_jour := 'Samedi';
ELSE v_jour := 'Erreur'; -- En cas d'erreur
END CASE;
-- Afficher le résultat
DBMS_OUTPUT.PUT_LINE('Le jour de la semaine est : ' || v_jour);
END;
--ex3
-- 1. Compter le nombre d'employés dans le département 50 et vérifier les postes
vacants
DECLARE
v_count_employes NUMBER;
v_capacite NUMBER := 45; -- Capacité maximale du département
v_postes_vacants NUMBER;
BEGIN
-- Compter le nombre d'employés dans le département 50
SELECT COUNT(*)
INTO v_count_employes
FROM employees
WHERE department_id = 50;
-- Calculer le nombre de postes vacants
v_postes_vacants := v_capacite - v_count_employes;
-- Afficher le résultat
DBMS_OUTPUT.PUT_LINE('Nombre d''employés dans le département 50 : ' ||
v_count_employes);
IF v_postes_vacants > 0 THEN
DBMS_OUTPUT.PUT_LINE('Le département 50 a des postes vacants : ' ||
v_postes_vacants);
ELSE
DBMS_OUTPUT.PUT_LINE('Le département 50 n''a pas de postes vacants.');
END IF;
END;
--Q2. Compter le nombre d'employés dans un département spécifique et vérifier les
postes vacants
DECLARE
v_department_id NUMBER := 10; -- Remplacer par le numéro de département
souhaité
v_count_employes NUMBER;
v_capacite NUMBER := 45; -- Capacité maximale du département
v_postes_vacants NUMBER;
BEGIN
-- Compter le nombre d'employés dans le département spécifique
SELECT COUNT(*)
INTO v_count_employes
FROM employees
WHERE department_id = v_department_id;
-- Calculer le nombre de postes vacants
v_postes_vacants := v_capacite - v_count_employes;
-- Afficher le résultat
DBMS_OUTPUT.PUT_LINE('Nombre d''employés dans le département ' ||
v_department_id || ' : ' || v_count_employes);
IF v_postes_vacants > 0 THEN
DBMS_OUTPUT.PUT_LINE('Le département ' || v_department_id || ' a des postes
vacants : ' || v_postes_vacants);
ELSE
DBMS_OUTPUT.PUT_LINE('Le département ' || v_department_id || ' n''a pas de
postes vacants.');
END IF;
END;
--EX4
DECLARE
v_nombre NUMBER := 23146579;
v_chiffre NUMBER;
v_count_even NUMBER := 0;
v_count_odd NUMBER := 0;
BEGIN
WHILE v_nombre > 0 LOOP
v_chiffre := MOD(v_nombre, 10);
v_nombre := TRUNC(v_nombre / 10);
IF MOD(v_chiffre, 2) = 0 THEN
v_count_even := v_count_even + 1;
ELSE
v_count_odd := v_count_odd + 1;
END IF;
END LOOP;
DBMS_OUTPUT.PUT_LINE('Nombre de chiffres impairs dans le nombre : ' ||
v_count_odd);
DBMS_OUTPUT.PUT_LINE('Nombre de chiffres pairs dans le nombre : ' ||
v_count_even);
END;
--2
/*CREATE TABLE temp (
COL1 NUMBER,
COL2 NUMBER,
COL3 VARCHAR2(10)
);*/
SET SERVEROUTPUT ON;
DECLARE
v_index NUMBER; -- Variable pour l'indice de boucle
v_value NUMBER; -- Variable pour la valeur multiple de 100
v_parity VARCHAR2(10); -- Variable pour la parité (pair ou impair)
BEGIN
FOR v_index IN 1..10 LOOP
v_value := v_index * 100; -- Calculer la valeur multiple de 100
-- Déterminer la parité
IF MOD(v_index, 2) = 0 THEN
v_parity := 'even'; -- Si l'indice est pair
ELSE
v_parity := 'odd'; -- Si l'indice est impair
END IF;
-- Insérer dans la table temp
INSERT INTO temp (COL1, COL2, COL3) VALUES (v_index, v_value, v_parity);
END LOOP;
COMMIT; -- Valider les changements pour s'assurer qu'ils soient enregistrés
END;
DELETE FROM temp;
COMMIT;
select * from temp;
--ex5
DECLARE
a NUMBER := 3; -- Remplacez par l'entier a
b NUMBER := 2; -- Remplacez par l'entier b
div NUMBER; -- Variable pour stocker le reste
BEGIN
div := a - (b * TRUNC(a / b)); -- Calculer le reste sans MOD
DBMS_OUTPUT.PUT_LINE('Le reste de ' || a || ' divisé par ' || b || ' est : ' ||
div);
END;
--ex6
CREATE TABLE Parfait (
id NUMBER PRIMARY KEY,
nombre_parfait NUMBER
);
-- Vider la table avant l'insertion pour éviter des duplications
DECLARE
v_number NUMBER; -- Variable pour les nombres à vérifier
v_sum NUMBER; -- Variable pour la somme des diviseurs
v_id NUMBER := 1; -- Compteur pour les IDs
BEGIN
-- Vérifier les nombres de 2 à 6
FOR v_number IN 2..6 LOOP
v_sum := 0; -- Réinitialiser la somme des diviseurs pour chaque nombre
-- Calculer la somme des diviseurs stricts
FOR i IN 1..(v_number / 2) LOOP
IF MOD(v_number, i) = 0 THEN
v_sum := v_sum + i; -- Ajouter le diviseur à la somme
END IF;
END LOOP;
-- Vérifier si c'est un nombre parfait
IF v_sum = v_number THEN
INSERT INTO Parfait (id, nombre_parfait) VALUES (v_id, v_number);
v_id := v_id + 1; -- Incrémenter l'ID pour le prochain nombre parfait
END IF;
END LOOP;
COMMIT; -- Valider les changements
END;
-- Afficher les résultats
SELECT * FROM Parfait;
DELETE FROM Parfait;
DELETE FROM Parfait;
COMMIT;