1 pièce(s) jointe(s)
Problème dans une procédure
bonjour tout le monde;
je vous serait très reconnaissant si vous voulez bien me dire ou est e problème.
En faite il s'agit d'une procédure en pl sql qui fait une augmentation salariale
je vous joint le modèle physique en pièce jointe.Pièce jointe 177838
L'énoncé est comme suit :
Automatisez à l’aide d’unité(s) de programmation PL/SQL l’augmentation salariale des employés ayant plus de 10 ans d’expérience pour un travail donné dans l’entreprise.
Une augmentation de salaire signifie passer d’un salaire de niveau n à un salaire de niveau n+1 (classe_salariale.niveau_sal). Les employés en niveau 5 (maximum de classe_salariale.niveau_sal) n’ont pas le droit à une augmentation de salaire.
Notez qu’il n’y a que 5 enregistrements dans la table CLASSE_SALARIALE (correspondant aux 5 niveaux de salaire).
le problème dans ma requête que j arrive pas a trouver comment updater la table travaille
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| create or replace procedure augmentation_salariale (nombre_années_experience in number) is
Begin
declare
cursor cursor_1 is
select emp_id,travaille.sal_id,dep_id , classe_salariale.niveau_sal,debut from travaille, classe_salariale
where travaille.sal_id = classe_salariale.sal_id
and classe_salariale.niveau_sal < 5
and to_char(sysdate,'yyyy')-to_char(travaille.debut,'yyyy') > nombre_années_experience;
niveau_salaire classe_salariale.niveau_sal%type;
identifiant_salaire classe_salariale.sal_id%type;
identifiant_employe travaille.emp_id%type ;
identifiant_dep travaille.dep_id%type;
begin
open cursor_1;
loop
fetch cursor_1 into identifiant_employe ,identifiant_dep, identifiant_salaire, niveau_salaire, date_debut ;
exit when cursor_1%notfound ;
update travaille set emp_id= identifiant_employe,
sal_id =(select sal_id from classe_salariale where classe_salariale.niveau_sal= niveau_salaire + 1),
dep_id = identifiant_dep,
where travaille.debut= date_debut;
end loop;
close cursor_1;
end;
end;
execute augmentation_salariale(10); |
problème dans une procédure
Bonjour McM,
Merci infiniment pour tes corrections, ça m'a servis d'exécuter la procédure mais sans aucun effet sur la table travaille .
et effet la procédure s'exécute sans mettre a jour le SAL_ID dans la table travaille;
et je ne sais pas ou est le problème .
je vous joint le nouveau code sql ci-dessous
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| create or replace procedure augmentation_salariale (nombre_années_experience in number) is
cursor cursor_1 is
select emp_id,travaille.sal_id,dep_id , classe_salariale.niveau_sal from travaille, classe_salariale
where travaille.sal_id = classe_salariale.sal_id
and classe_salariale.niveau_sal < 5
and to_char(sysdate,'yyyy')-to_char(travaille.debut,'yyyy') > nombre_années_experience;
niveau_salaire classe_salariale.niveau_sal%type;
identifiant_salaire classe_salariale.sal_id%type;
identifiant_employe travaille.emp_id%type ;
identifiant_dep travaille.dep_id%type;
begin
for res in cursor_1 loop
fetch cursor_1 into identifiant_employe ,identifiant_dep, identifiant_salaire, niveau_salaire ;
exit when cursor_1%notfound ;
update travaille set sal_id =(select sal_id from classe_salariale where classe_salariale.niveau_sal= niveau_salaire + 1)
where
travaille.emp_id=identifiant_employe and travaille.dep_id=identifiant_dep and travaille.sal_id=identifiant_salaire;
commit;
end loop;
end;
show errors,
execute augmentation_salariale(10); |