Voila en ce moment je suis en train de tester les tables objet relationnel et pour assurer l'intégrité référentiel j'ai du créer un trigger (before insert) qui vérifie donc quan j'insert une nouvelle ligne si une référence n'est pas déja contenu dans la table ou pointe cette référence.

Voila la table concerné par le trigger :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
create table operation
(num_op char(5) primary key NOT  NULL,
salleop char(15),
dateop date,
description char(30),
refpat REF t_patient scope is ob_patient,
listeactes t_liste_actes)
nested table listeactes store as acte_tab;
et voila le trigger en question :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
create or replace trigger trig_patient
  before insert on operation
  for each row
declare
nbr number;
table_mutante exception;
pragma exception_init(table_mutante, -4091);
begin
  select count(*) into nbr
    from operation
    where refpat = :NEW.refpat;
  if not (nbr = 0) then
    Raise_application_error(-20101,'Pb unicité : doublon');
  end if;
  exception when table_mutante then 
  dbms_output.put_line('Fausse alerte');
end;
j'ai dû capturer l'erreur "-4091 table mutante" parce que quand j'essayais d'insert une nouvelle ligne il m'affichait cette erreur.

Mais a présent le trigger ne m'affiche plus l'erreur. Il ne fait rien, même quand je met la même référence il ajoute la ligne.

Voila si vous pouviez me dire comment résoudre mon probleme je vous serais trés reconnaissant^^.

ps : mon insert de test

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
insert into operation 
select '1','salle 1','17/06/07','Transplantation', ref(p), t_liste_actes(t_acte('A01', 'radio thorax', 1234.56, ref(m))) 
from ob_patient p, ob_medecin m 
where num_p = '1' and num_m = '1';
Bien evidemment il y a déja une ligne dans la table avec le meme patient en référence.