Bonjour,
Je ne savais pas ou mettre ce post donc je le met là.
Voilà mon soucis:
J'ai une base de données sur oracle qui doit gérer des hospitalisations.
Voici mes différentes tables:
PATIENTS (Numpat(clé primaire), Nom, Prenom, datenai)
SERVICE (Numserv(clé primaire), Libelle, Nbrelitmaxi)
CHAMBRE (Numch(clé primaire), nblit, Numserv)
HOSPITALISATION (Numpat, Numch, Datedeb(les trois clés primaire), datefin)
En faite je doit faire un Trigger qui me permet de vérifier à l'insertion et à la modification si la chambre voulu n'est pas pleine pour les dates voulus et si le patien n'est pas déjà hospitalisé pour cette période.
Voici le trigger que j'ai réalisé:
Il enregistre tous les patient que je lui insert sans regarder le nombre de lit pour la chambre ni les dates.
Si vous trouvez se qui ne vas pas je vous en serais trés reconnaissante.
Bonne fin de journée.
Miala
Modifié par Miala (16 Apr 2009 - 10:05)
Je ne savais pas ou mettre ce post donc je le met là.
Voilà mon soucis:
J'ai une base de données sur oracle qui doit gérer des hospitalisations.
Voici mes différentes tables:
PATIENTS (Numpat(clé primaire), Nom, Prenom, datenai)
SERVICE (Numserv(clé primaire), Libelle, Nbrelitmaxi)
CHAMBRE (Numch(clé primaire), nblit, Numserv)
HOSPITALISATION (Numpat, Numch, Datedeb(les trois clés primaire), datefin)
En faite je doit faire un Trigger qui me permet de vérifier à l'insertion et à la modification si la chambre voulu n'est pas pleine pour les dates voulus et si le patien n'est pas déjà hospitalisé pour cette période.
Voici le trigger que j'ai réalisé:
create or replace trigger InitHospitalisation
before insert or update on Hospitalisation
for each row
declare
chlit number;
nblits number;
begin
select count(*) into chlit
from HOSPITALISATION
where Numch = :new.Numch
And ((datedeb >= :new.datedeb) and (datefin >= :new.datefin))
or ((datedeb < :new.datedeb) and (datefin < :new.datefin))
or ((datedeb > :new.datedeb) and (datefin > :new.datefin))
or ((datedeb > :new.datedeb) and (datefin < :new.datefin));
select Nblit into nblits
from CHAMBRE
where Numch = :new.Numch;
if (chlit + 1 > nblits) then
raise_application_error(-20000,'Tous les lits sont pris pour cette chambre');
end if;
end;
/
Il enregistre tous les patient que je lui insert sans regarder le nombre de lit pour la chambre ni les dates.
Si vous trouvez se qui ne vas pas je vous en serais trés reconnaissante.
Bonne fin de journée.
Miala
Modifié par Miala (16 Apr 2009 - 10:05)