Syntaxe SQL GDAL pour ajouter des valeurs de champ et de vente

9

J'essaie de créer un nouveau champ dans ma table d'attributs et de mettre des valeurs d'un autre champ après la conversion de caractère en entier, mais je ne peux pas obtenir la bonne syntaxe. Je l'exécute comme shell-script dans MSYS.

cd D:/GIS_DataBase/CorineLC/shps_app_and_extr/
myfile=extr_and_app.shp

name=${myfile%.shp}

ogrinfo $myfile -sql "ALTER TABLE $name ADD COLUMN code_num int(3)"
ogrinfo $myfile -sql "UPDATE TABLE $name SET code_num = CONVERT(code_06 As int(3))"

Message d'erreur (MSYS):

Kay@KAY-PC /c/users/kay/desktop/bash
$ sh calc_field_shp.sh
Warning 6: Unsupported column type 'int'. Defaulting to VARCHAR
INFO: Open of `extr_and_app.shp'
      using driver `ESRI Shapefile' successful.
ERROR 1: SQL Expression Parsing Error: syntax error
INFO: Open of `extr_and_app.shp'
      using driver `ESRI Shapefile' successful.

Edit - Un autre coup avec SQLite:

cd D:/GIS_DataBase/CorineLC/shps_app_and_extr/
myfile=extr_and_app.dbf

name=${myfile%.dbf}

ogrinfo $myfile -sql "ALTER TABLE $name DROP COLUMN code_num"

ogrinfo $myfile -sql "ALTER TABLE $name ADD COLUMN code_num integer(3)"
ogrinfo $myfile -dialect SQLite -sql "UPDATE $name SET code_num = CAST(code_06 As integer(3))"

Message d'erreur:

Kay@KAY-PC /c/users/kay/desktop/bash
$ sh calc_field_shp.sh
INFO: Open of `extr_and_app.dbf'
      using driver `ESRI Shapefile' successful.
INFO: Open of `extr_and_app.dbf'
      using driver `ESRI Shapefile' successful.
ERROR 1: SQL Expression Parsing Error: syntax error
INFO: Open of `extr_and_app.dbf'
      using driver `ESRI Shapefile' successful.
Kay
la source
Quelle erreur obtenez vous?
RK
@RK, j'ai ajouté le message d'erreur à l'op.
Kay
avez-vous essayé CAST au lieu de CONVERT?
dmci
Je l'ai fait sans succès ..
Kay

Réponses:

13

Comme UPDATE n'est pas pris en charge dans OGR SQL , comme vous l'avez indiqué dans un commentaire, vous devez mettre à jour la table à l'aide du dialecte SQLite SQL disponible dans GDAL> = 1.10 avec la prise en charge de SQLite et SpatiaLite :

ogrinfo $myfile -sql "ALTER TABLE $name ADD COLUMN code_num integer(3)"
ogrinfo $myfile -dialect SQLite -sql "UPDATE $name SET code_num = CAST(code_06 AS integer(3))"
Antonio Falciano
la source
3

Vous pouvez essayer d'utiliser l'opérateur CAST comme dmci l' a mentionné comme ça

ogrinfo $myfile -sql "UPDATE TABLE $name SET code_num = CAST(code_06 as int(3))"

Le dialecte SQL pris en charge par OGR n'a pas CONVERT s'il est correctement rappelé. Vous pouvez consulter la documentation pour plus d'informations. Bonne chance!

RK
la source
1
Apparemment, cela UPDATEn'est pas pris en charge, voir ici: osgeo-org.1560.x6.nabble.com/… Cependant, cela devrait être en dialecte SQLite mais je n'ai pas eu de chance avec ça non plus ..
Kay
Quelle version de GDAL utilisez-vous?
RK
J'utilise gdal-17
Kay
1
Le dialecte SQLite a besoin de GDAL / OGR 1.10 .
scruss