A quoi sert ton SELECT sur les tables PERSONNE ET PRESENTE si c'est pour récupérer le CODPERS ?[/B]
CodPers ne se trouve pas dans la table Emission, c'est pour ça cette requete avec jointure tables presente,personne ou se trouve CodPers:
Personne(
CodPers,Nom,Prenom.....,NCH); où COdPers est clé primaire
N'est-il pas possible de faire l'INSERT directement ?
du coup non
S'il existe une FK entre ta table Historique et ta table Emission, il va être clairement impossible d'archiver les émissions supprimées !
Tout à fait d'accord je l'ai supprimée j'ai créé un contrainte FK à la place sur le champ CodPers :
Code:
1 2 3
|
CONSTRAINT "FK_CODPERS_HP" FOREIGN KEY ("CODPERS")
REFERENCES "PERSONNE" ("CODPERS") ENABLE |
mais je me demande si cette contrainte me sera utile je verrai plus tard...
De plus, dans mon esprit il me semblait que la table HIST_PRESENT est une "image" des enregistrements supprimés de la table PRESENTE.
Si c'est le cas, le trigger doit alors être rattaché à la table PRESENTE et non à la table EMISSION.
Oui en effet c'est bien une image mais je vois pas trop pourquoi ça te gène, car le trigger insère après suppression de la table Emission dans la table Histo_Present.
Pour ma part j'ai modifié mon plan :
avant :
EMission(CodEmis,NomEmis);
Histo_Presente(CodEmis,CodPers,NCh,Date_Deb,Date_Fin);ou CodEmis clé étrangère vers table Emission
Presente(CodEmis,CodPers);ou CodEmis clé étrangère vers table Emission içi "on delete cascade"
maintenant :
EMission(CodEmis,NomEmis);
inchangé
Histo_Presente(CodEmis,CodPers,NCh,Date_Deb,Date_Fin);
CodPers clé étrangère vers table Personne
Presente(CodEmis,CodPers);
ou CodEmis clé étrangère vers table Emission plus de "on delete cascade"
Et le trigger sur la table EMission qui supprime les enregistrements sur la table Presente:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
CREATE OR REPLACE TRIGGER "Suppr Emission"
before delete on Emission
for each row
declare
wcodpers char(100);
begin
select personne.codpers into wcodpers from presente,personne where presente.codemis=:old.codemis and presente.codpers=personne.codpers and personne.nch=:old.nch;
insert into Hist_Present values(:old.codemis,wcodpers,:old.nch,:old.dat_deb_dif,sysdate);
delete from presente where presente.codemis=:old.codemis;
end;
/
ALTER TRIGGER "Suppr Emission" ENABLE
/ |