Mise à jour de données versionnées dans DB2 à l'aide de SQL
Vous pouvez mettre à jour des données versionnées dans une géodatabase IBM DB2 sur un système d'exploitation Linux, UNIX ou Windows de deux façons : en modifiant une version nommée via une vue versionnée ou en modifiant la version PAR DEFAUT via une vue versionnée. Consultez la rubrique Présentation rapide de la mise à jour de données versionnées à l'aide de SQL pour une description de chacune des méthodes de mise à jour.
Dans la plupart des cas, vous utiliserez une seule méthode de mise à jour. Il est cependant possible d'utiliser les deux méthodes au même site. Ce workflow explique donc comment utiliser les deux méthodes afin que vous sachiez comment procéder pour passer de l'une à l'autre. Si vous utilisez une seule méthode, lisez la section portant sur la méthode de mise à jour que vous souhaitez utiliser.
![Remarque Remarque](rsrc/note.png)
Les vues versionnées ne sont pas prises en charge dans les bases de données DB2 sur les systèmes d'exploitation z.
Mise à jour de la version PAR DEFAUT
Vous pouvez utiliser SQL pour vous connecter à la version PAR DEFAUT et mettre à jour une vue versionnée. Il n'est pas nécessaire d'ouvrir une session de mise à jour. Lorsque vous commencez la mise à jour, vous vous connectez automatiquement à l'état courant de la version PAR DEFAUT.
Validez après chaque modification effectuée pour éviter d'empêcher d'autres utilisateurs d'accéder aux tables de deltas de la table ou de la classe d'entités.
Dans les étapes suivantes, une vue versionnée (blic_vw) est mise à jour. Les mises à jour apportées à cette vue sont écrites dans les tables de deltas de la table versionnée blic. Comme il n'y a que deux modifications, elles seront apportées dans la version PAR DEFAUT.
- Connectez-vous à la base de données à partir d'un client SQL. Veillez à vous connecter en tant qu'utilisateur ayant les privilèges requis pour mettre à jour le jeu de données et la vue versionnée.
-
Effectuez la première modification dans la vue versionnée à l'aide de SQL.
Dans cet exemple, un enregistrement existant est mis à jour pour modifier le nom du propriétaire de propriété.
UPDATE blic_vw SET propowner = 'C. O. Industry' WHERE lic = 44977;
- Validez vos mises à jour.
COMMIT;
- Faites la modification suivante.
Un nouvel enregistrement est ajouté à la table via la vue versionnée.
INSERT INTO blic_vw (propowner, date_entered, location) VALUES ( 'Moe Esposito', CURRENT TIMESTAMP, db2gse.ST_PointFromText ('point (0.0125662 0.0046711)', 12));
Astuce:
Dans l'instruction INSERT, aucune valeur d'identifiant d'objet n'est spécifiée. La vue versionnée obtient automatiquement le prochain identifiant d'objet disponible, qui est inséré dans l'enregistrement.
- Validez vos mises à jour.
COMMIT;
Mise à jour d'une version nommée
Une pile de mises à jour pour la classe d'entités blic vous est remise. Vous décidez donc que ce serait une bonne idée d'effectuer les modifications dans une version nommée.
Les procédures stockées utilisées pour modifier une version nommée de la géodatabase et leur syntaxe sont présentées ci-dessous :
Procédure stockée | Objet | Syntaxe et description |
---|---|---|
sde.create_version | Crée une version nommée de la géodatabase. Si vous mettez à jour des versions nommées (versions autres que la version PAR DEFAUT), modifiez toujours votre propre version distincte; plusieurs éditeurs ne peuvent pas modifier la même version nommée à l'aide de vues versionnées. | CALL sde.create_version ('<parent_version>', '<child_version>', <name_rule>, <access>, '<description>', <message_code_output>, <message_output>) |
sde.setcurrentversion | Définit la version de géodatabase à laquelle vous souhaitez accéder et son état. Vous accédez à l'état sur lequel la version pointait lorsque vous avez appelé setcurrentversion. | CALL sde.setcurrentversion('<child_version>', <message_code_output>, <message_output>) |
sde.edit_version | Démarre et termine une session de mise à jour sur une version nommée. Les mises à jour dans la transaction sont validées chaque fois que cette procédure est appelée. | CALL sde.edit_version('<child_version>', <1 or 2>, <message_code_output>, <message_output>) Spécifiez 1 pour démarrer la session de mise à jour. Spécifiez 2 pour l'arrêter. |
Les paramètres dans les instructions d'appel représentent les éléments suivants :
- <parent_version> est la version à partir de laquelle votre version est créée.
- <child_version> est la version nommée que vous créez pour mise à jour.
- <name_rule> indique si le nom spécifié pour la version doit être accepté tel qu'il est fourni (2) ou si un nom unique doit être créé quand un nom dupliqué est spécifié (1).
- <access> est le niveau d'autorisation de la version : 0 pour Privé, 1 pour Public ou 2 pour Protégé.
- <description> est un texte descriptif de la version enfant.
- <message_code_output> indique que vous voulez que le code SQL vous soit renvoyé.
- <message_output> indique que vous voulez que les messages SQL vous soient renvoyés.
Dans les étapes suivantes, une version nommée (myedits12111) est créée à partir de la version PAR DEFAUT et les modifications sont apportées dans cette version via la vue versionnée blic_vw.
-
A partir d'une invite de commande, créez une nouvelle version dans laquelle effectuer les mises à jour.
CALL sde.create_version ('SDE.DEFAULT', 'myedits12111', 1, 1, 'versioned view edit version', ?, ?);
-
Définissez la version pour la session de mise à jour sur la version enfant que vous venez de créer.
CALL sde.setcurrentversion('myedits12111', ?, ?);
Cela définit l'état de modification sur l'état courant de myedits12111.
-
Ouvrez une session de mise à jour en appelant la procédure stockée edit_version et en spécifiant 1. La valeur 1 indique qu'une session de mise à jour doit être ouverte.
CALL sde.edit_version('myedits12111', 1, ?, ?);
- A partir d'un client SQL, démarrez une nouvelle transaction pour mettre à jour blic_vw.
-
Apportez un ensemble de modifications sur la vue versionnée à l'aide de SQL.
INSERT INTO blic_vw (propowner, date_entered, location) VALUES ( 'V. Nay', CURRENT TIMESTAMP, db2gse.ST_PointFromText ('point (0.0125699 0.0046700)', 12)); UPDATE blic_vw SET (phone1,phone2) = ('555.111.2345','555.111.6789') WHERE propowner = 'Tella Chomsky'; UPDATE blic_vw SET exp_date = '2020-06-30 17:00:00' WHERE lid = 22903; UPDATE blic_vw SET location = db2gse.ST_PointFromText ('point (0.0125705 0.0046688)', 12)) WHERE lid = 8992; INSERT INTO blic_vw (codenum, propowner) VALUES (456, 'Anjo Badsu'); DELETE FROM blic_vw WHERE lid = 133;
- Validez vos mises à jour.
COMMIT;
-
Arrêtez la session de mise à jour en appelant la procédure stockée edit_version, mais cette fois, spécifiez 2. La valeur 2 indique que la session de mise à jour doit être arrêtée.
CALL sde.edit_version('myedits12111', 2, ?, ?);
Astuce:
Vous pouvez modifier une seule version par session de mise à jour. Par exemple, si vous désirez modifier une deuxième version (telle que mynewedits), vous devez fermer la session de mise à jour sur myedits12111, comme l'indique cette étape. Vous pourriez ensuite appeler setcurrentversion pour pointer la version mynewedits et démarrer une session de mise à jour sur cette version en appelant edit_version.
Le texte entre guillemets simples est lu littéralement. Par conséquent, le texte que vous saisissez entre guillemets doit correspondre à la casse du texte (tout en majuscules, tout en minuscules ou casse mixte) tel qu'il est stocké dans la base de données.
Basculer de la mise à jour d'une version nommée à la mise à jour de la version PAR DEFAUT
Si vous devez revenir à la mise à jour de la version PAR DEFAUT directement, par exemple si votre gestionnaire vous dit que d'autres utilisateurs de votre site doivent voir une modification particulière sur-le-champ, vous pouvez appeler set_default pour ce faire. Les modifications que vous apportez à la version PAR DEFAUT sont visibles par les autres utilisateurs connectés à la version PAR DEFAUT dès qu'ils actualisent leur connexion client.
La procédure stockée utilisée pour modifier la version PAR DEFAUT de la géodatabase et sa syntaxe sont présentées ci-dessous :
Procédure stockée | Objet | Syntaxe et description |
---|---|---|
sde.set_default | Revient à la mise à jour de l'état courant de la version PAR DEFAUT. Appelez cette procédure si vous modifiiez une version nommée ou un état spécifique de la version PAR DEFAUT, mais souhaiter revenir à la mise à jour de l'état courant de la version PAR DEFAUT. | CALL sde.set_default (<message_code_output>, <message_output>) <message_code_output> indique que vous voulez que le code SQL vous soit renvoyé. <message_output> indique que vous voulez que les messages SQL vous soient renvoyés. |
- A l'invite SQL, appelez la procédure set_default.
CALL sde.set_default
La session est maintenant configurée pour mettre à jour l'état courant référencé par la version PAR DEFAUT.
- Modifiez la vue versionnée blic_vw.
INSERT INTO blic_vw (propowner, b_name, date_entered, location) VALUES ( 'Ruben Gol', CURRENT TIMESTAMP, 'Chez Coiffure', db2gse.ST_PointFromText ('point (0.0125650 0.0046721)', 12));
- Validez vos mises à jour.
COMMIT;
Les autres clients qui pointent sur le même état de la version PAR DEFAUT ou sur tout état dans sa lignée peuvent actualiser leur connexion et voir la nouvelle entité ponctuelle.
Réconcilier et publier les modifications à la version nommée
Lorsque vous avez terminé la mise à jour de la version nommée, vous devez vous utiliser ArcGIS pour réconcilier, réviser et résoudre les conflits et publier vos modifications. Cela peut être fait dans ArcGIS for Desktop à l'aide de l'outil de géotraitement Réconcilier une version par lot ou un script Python. Pour plus d'informations, consultez les rubriques suivantes :
![Astuce Astuce](rsrc/tip.png)
Si les données que vous modifiiez étaient inscrites comme versionnées avec l'option d'enregistrement des mises à jour dans la table de base, les mises à jour sont déplacées vers la table de base après leur réconciliation et réinjection dans la version PAR DEFAUT.
Une fois les mises à jour réinjectées dans la version PAR DÉFAUT, votre version nommée peut être supprimée. La procédure stockée utilisée pour supprimer la version nommée après avoir réconcilié et réinjecté les mises à jour dans la version PAR DEFAUT de la géodatabase et sa syntaxe sont présentées ci-dessous :
Procédure stockée | Objet | Syntaxe et description |
---|---|---|
sde.delete_version | Supprime une version de géodatabase. | CALL sde.delete_version('<child_version>', <message_code_output>, <message_output>) |
L'exemple suivant supprime myedits12111 une fois toutes les modifications réconciliées et réinjectées dans la version PAR DEFAUT :
CALL sde.delete_version ('myedits12111', ?,?);