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

Rencontres QGIS 2025

L'appel à participation est ouvert jusqu'au 19 janvier 2025!

#1 Thu 19 December 2013 13:40

damien_B
Participant occasionnel
Lieu: Limoges
Date d'inscription: 14 Nov 2013
Messages: 10

Insert/update/delete d'un shape vers Oracle

Bonjour,
voici mon problème et le contexte.
J'ai 2 shapefile de type point. Le premier représente des supports, le deuxième des panneaux liés aux supports.

Concentrons-nous sur un seul shape.

Mon objectif est de réussir à importer le shape des supports vers une base de données Oracle Spatial.
Avec la table vide l'insertion fonctionne, j'arrive à importer tous mes supports, avec les bons attributs, etc.

Maintenant où ça se complique (je découvre FME et il est plus complexe à prendre en main que Geokettle mais vu la puissance du logiciel ça se comprend), qui plus est je découvre le monde professionnel des SIG, je n'ai donc pas toutes les notions ou l'esprit de logique qui va avec (actuellement en stage de Master 2 recherche).


Schématiquement :

Je dispose d'une tablette pour relevé les supports.
J'obtiens un shape à partir de la tablette.
Il faut donc que périodiquement je puisse mettre à jour la base de données oracle pour 3 cas de figure :
- un nouveau support est crée avec la tablette mais absent de la base oracle
- un support est modifié (un attribut x) avec la tablette mais les modifs pas encore dans la base oracle
- un support présent dans la base oracle est supprimé avec la tablette


J'arrive à faire séparément :
- l'étape de mise à jour
- l'étape de suppression

Mais je n'arrive pas à faire l'étape d'insertion de supports crées par la tablette et absent de la base oracle (cela me donne une erreur de contrainte unique, partant du principe que l'insertion de base est déjà faite).
Je ne préfère pas détailler mon workbench, je ne pense pas que mes explications seraient très claires et je préfère partir de zéro avec vos conseils/aides/remarques.

Ne pas hésiter si des informations essentielles sont manquantes ou mal exprimées.
Merci d'avance.
Cordialement,

Hors ligne

 

#2 Fri 20 December 2013 08:20

Pim
Participant actif
Lieu: Plesder
Date d'inscription: 2 Aug 2007
Messages: 59

Re: Insert/update/delete d'un shape vers Oracle

Bonjour Damien,

Sur ta table oracle, tu dois avoir une contrainte comme une clé, un ID par exemple.
Il faut que tu incrémentes tes insertions avec counter en tenant compte de l'ID max

Exemple :

Dans ta table oracle, tu as X objets

Il faut que tu mettes cette table en donnée source dans ton projet, ainsi que ton shp
A c'est deux tables, tu crées un champ jointure avec une valeur "1"
A ta table oracle, tu doit récupérer le X max avec StatisticsCalculator, il te donne un champ "_max"
Tu y associes un AttributeKeeper pour garder que les champs "jointure" et "_max"
Puis tu joins tes deux tables avec un FeatureMerger et tu prends jointure comme champ à joindre
Pour l'entrée de ton FeatureMerger, ton shp en REQUESTOR et ta table oracle en SUPPLIER
Tu mets ton counter à la sortie MERGED, tu mets dans "première valeur" cette formule "@Value(_max)+1"

voilà le tour est joué

C'est une solution que j'ai trouvé mais il peut y en avoir d'autre
J'espère que c'est clair pour toi

Bonne continuation
@plus
Pim

Dernière modification par Pim (Fri 20 December 2013 08:21)

Hors ligne

 

#3 Fri 20 December 2013 09:06

damien_B
Participant occasionnel
Lieu: Limoges
Date d'inscription: 14 Nov 2013
Messages: 10

Re: Insert/update/delete d'un shape vers Oracle

Merci pour beaucoup, je suis en train de tester ta solution, en tout cas bien expliquée smile

Hier soir je crois avoir trouvé une solution un peu différente mais faut que je refasse des tests, mais la tienne est moins alambiquée que la mienne smile

Mais je bloque au counter, ça ne veut pas valider la première valeur @Value(_max)+1
J'ai sûrement du oublier quelque chose dans le feature merger ou une erreur de synthaxe.
[img]http://image.noelshack.com/minis/2013/51/1387526586-feature-merger.png[/img]
Le counter doit bien être relié au feature merger par la sortie "COMPLETE"?
La liste des sorties de mon feature merger :
Complete
Incomplete
empty
referenced
unreferenced
duplicate_suplier


Pour la suppression finalement j'avais analysé trop rapidement, elle ne donne pas les résultats voulus. Une fois l'insertion/update résolu faudra que je revois cette étape de suppression.

Dernière modification par damien_B (Fri 20 December 2013 09:27)

Hors ligne

 

#4 Fri 20 December 2013 10:06

Pim
Participant actif
Lieu: Plesder
Date d'inscription: 2 Aug 2007
Messages: 59

Re: Insert/update/delete d'un shape vers Oracle

oui c'est bien sur "COMPLETE"

désolé mais le lien de l'image est bloqué par le proxy du travail sad
pour le FertureMerger il faut que le type de regroupement soit "Attributs seulement"

tu utilises quel version de FME ??

Hors ligne

 

#5 Fri 20 December 2013 10:13

damien_B
Participant occasionnel
Lieu: Limoges
Date d'inscription: 14 Nov 2013
Messages: 10

Re: Insert/update/delete d'un shape vers Oracle

Pour l'image le détail de la fenêtre feature merger :
Regrouper par : aucun item sélectionné
Type de regroupement : attributs seulement
attribut de jointure du demandeur : jointure
attribut de jointure du fournisseur
nom de liste : vide
construire les demandeurs incomplets : non
traiter les fournisseurs multiples : non

Pour la version de FME c'est "FME 2010 (20091215 - Build 6198 - WIN32)


Et pour le counter relié au port COMPLETE
Attribut compteur : _count
Séquence : counter
Première valeur : 0 par défaut (et donc le @Value ne permet pas de valider)
Portée du compteur : Global

Dernière modification par damien_B (Fri 20 December 2013 10:14)

Hors ligne

 

#6 Fri 20 December 2013 10:26

Pim
Participant actif
Lieu: Plesder
Date d'inscription: 2 Aug 2007
Messages: 59

Re: Insert/update/delete d'un shape vers Oracle

ok

il faut que tu mets "jointure" dans attribut de jointure du fournisseur
Si tu n'as pas ce champ en proposition c'est que tu as oublié de créer le champ jointure, avec la valeur 1, au fournisseur

pour le counter, est ce que tu peux ouvrir un éditeur arithmétique
si oui copie la formule dedans

si non est ce que tu peux mettre à jour ta version de fme ???

Hors ligne

 

#7 Fri 20 December 2013 10:54

damien_B
Participant occasionnel
Lieu: Limoges
Date d'inscription: 14 Nov 2013
Messages: 10

Re: Insert/update/delete d'un shape vers Oracle

Oh pardon!
Erreur de ma part pour le feature merger j'ai bien mis jointure en attribut de jointure du fournisseur wink J'ai simplement oublié de l'écrire dans ma réponse ...
Non je ne peux pas ouvrir d'éditeur artihmétique dans le counter et je ne peux pas non plus mettre à jour la version de FME (je suis stagiaire dans le service et je suis sur le poste d'un collègue pour pouvoir utiliser FME)

Mais là je vais tester en mettant à la sortie du merger un "expression evaluator" avec le @value puis je mettrais la première valeur du counter avec le champ créer par l'expression evaluator, ça devrait fonctionner?

Je tiens au courant dans l'heure quand j'aurais refait toutes mes jointures avec les tables de contrôle pour que tout soit bien renseigné.

Hors ligne

 

#8 Fri 20 December 2013 11:36

Pierre
DesCartesPourUnMondeMeilleur
Date d'inscription: 22 Sep 2005
Messages: 1643

Re: Insert/update/delete d'un shape vers Oracle

Aloha,

Y a-t'il une séquence oracle associée à votre identifiant ? Si oui, ajouter un sql executor dans le flux des objets à insérer. Utiliser une requête du type

Code:

Select SCHEMA.NOM_SEQUENCE.NEXTVAL AS ID_ from dual

Récupérer cet valeur dans votre attribut (au besoin remplacer ID_ par le bon nom d'identifiant puis expose attribute dans sql executor), et mettez le en relation dans le writer.

Normalement cela devrait fonctionner. Attention cependant, l'appel NEXTVAL incrémente de fait votre séquence. Donc, votre listes d'identifiant peut être "discontinue". Et cette méthode ne fonctionne si et seulement si vous avez une séquence sur l'identifiant (mais c'est généralement le cas dans Oracle).

Cordialement,


art X I. Déclaration des Droits de l’Homme et du Citoyen 1789
La libre communication des pensées et des opinions est un des droits les plus précieux de l’Homme : tout Citoyen peut donc parler, écrire, imprimer librement, sauf à répondre de l’abus de cette liberté, dans les cas déterminés par la Loi.

Hors ligne

 

#9 Fri 20 December 2013 11:37

Pim
Participant actif
Lieu: Plesder
Date d'inscription: 2 Aug 2007
Messages: 59

Re: Insert/update/delete d'un shape vers Oracle

bonne idée pour l'expressionevaluator smile
je l'avais oublié celui là

Hors ligne

 

Pied de page des forums

Powered by FluxBB