0% ont trouvé ce document utile (0 vote)
12 vues5 pages

PLSQL

Transféré par

Walid officiel
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats TXT, PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
12 vues5 pages

PLSQL

Transféré par

Walid officiel
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats TXT, PDF, TXT ou lisez en ligne sur Scribd

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;

Vous aimerez peut-être aussi