Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Printemps des cartes 2024

#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

 

Pied de page des forums

Powered by FluxBB