#1 Wed 07 October 2020 11:35
- Tomapinfo
- Juste Inscrit !
- Lieu: Trans-en-Provence
- Date d'inscription: 19 Nov 2011
- Messages: 3
Trigger spatial Oracle
Bonjour,
J'essaye de reproduire un trigger qui fonctionne bien dans PostgreSQL/Postgis dans Oracle.
Le trigger remonte des informations lors de la saisie ou de la modification.
Code:
CREATE OR REPLACE FUNCTION x.champs_auto() RETURNS trigger AS $BODY$BEGIN NEW.num_insee = x.communes.num_insee FROM x.communes WHERE st_intersects(NEW.geom, x.communes.geom); RETURN NEW; END$BODY$ LANGUAGE plpgsql VOLATILE COST 100;
Mais dans Oracle, l'ecriture n'est pas identique et au mieux j'ai réussi à faire ça.
Code:
CREATE OR REPLACE TRIGGER "DBO"."Cps_auto_I" BEFORE INSERT -- ON Y -- FOR EACH ROW -- declare INSEE VARCHAR2(20) DEFAULT ''; Begin -- Select b.NUM_INSEE into INSEE from ua b WHERE SDO_RELATE(:NEW.GEOMETRIE,b.GEOMETRIE,'mask=INSIDE') = 'TRUE' and b.SOUS_TYPE = 'COMMUNES'; :NEW.NUM_INSEE := INSEE ; ; End;
Mais j'obtiens cette erreur alors que j'ai bien un index sur les 2 tables.
Erreur SQL : ORA-13226: interface non prise en charge sans index spatial
Je penses donc que l'objet n'est pas encore enregistré et donc pas dans l'Index.
Car le select seul fonctionne bien.
Au vue de ce message je me demande s'il y est vraiment possible de faire se genre de requête dans un trigger ?
Si cela est possible avez-vous une idée pour le corriger ?
Merci par avance.
Hors ligne
#2 Mon 04 January 2021 17:08
- tweaxy
- Participant actif
- Lieu: Abbeville
- Date d'inscription: 27 Dec 2018
- Messages: 76
Re: Trigger spatial Oracle
Bonjour, Pourquoi ne pas le faire AFTER INSERT ?
Je ne connais pas Oracle, mais visiblement, vous souhaitez juste remonter des infos ? Si tel est le cas, un AFTER devrait résoudre le problème
Cordialement,
Léandre
Hors ligne