Bonjour,

Je cherche à faire un trigger Oracle qui puisse récupérer une valeur dans un table à partir de sa position géographique.
J'ai deux tables :
- Une première "FAIT" de type point avec les champs suivant (id_fait,id_quartier,x,y,geometrie)
- Une deuxième "Quartier" de type surfacique avec les champs suivant (id_quartier,geometrie)

Mon trigger (sur la table fait) procède en deux étapes:
1. il calcule la géometrie de l'enregistrement à partir des X,Y (qui sont saisie automatiquement lors de l'implantation)
2. Il récupère la valeur id_quartier de l'enregistrement de la table quartier dans lequel l'enregistrement fait est inclu.

la syntaxe de mon trigger est la suivante :
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
18
19
20
21
 
create or replace trigger FAIT_GEOMETRY_TRG before insert or update
on FAIT
referencing new as new old as old
for each row
declare
/***************************************
alimentation du champ geometrie en automatique
***************************************/
begin
    if :new.X is not null and :new.Y is not null
    then
    if inserting then :NEW.GEOMETRIE:=MDSYS.SDO_GEOMETRY(2001,141012,MDSYS.SDO_POINT_TYPE(:NEW.X, :NEW.Y, null), null, null); end if;
    if updating ('X') then :NEW.GEOMETRIE:=MDSYS.SDO_GEOMETRY(2001,141012,MDSYS.SDO_POINT_TYPE(:NEW.X, :NEW.Y, null), null, null); end if;
    end if;
    if :new.geometrie is not null
    then
    if inserting then select (select quartier.id_quartier from quartier,fait where sdo_relate(:new.geometrie,quartier.geometrie,'mask=inside') = 'TRUE' and id_fait=:new.id_fait)  into :new.id_quartier from fait; end if;
    if updating ('X') then select (select quartier.id_quartier from quartier,fait where sdo_relate(:new.geometrie,quartier.geometrie,'mask=inside') = 'TRUE'and id_fait=:new.id_fait) into :new.id_quartier from fait; end if;
    end if;
end;
Le trigger se compile bien mais lorsqu'il s'exécute oracle me dit que la table fait est en mutation.
Je ne suis pas familier avec le language sql et je pense que mon problème vient de ma syntaxe lorsque j'utilise le select into.
Comment puis-je contourner ce problème?

Merci de votre aide.