Sintaxis GDAL SQL para agregar campo y valores de venta

9

Intento crear un nuevo campo en mi tabla de atributos y poner valores de otro campo después de convertir de carácter a entero, pero no puedo obtener la sintaxis correcta. Ejecuto esto como shell-script en 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))"

Mensaje de error (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.

Editar - Otra opción con 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))"

Mensaje de error:

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
fuente
¿Qué error estás recibiendo?
RK
@RK, agregué el mensaje de error a la operación.
Kay
¿Has probado CAST en lugar de CONVERT?
dmci
Lo hice sin éxito ..
Kay

Respuestas:

13

Debido a que UPDATE no es compatible con OGR SQL , como usted indicó en un comentario, debe actualizar la tabla utilizando el dialecto SQLite SQL disponible en GDAL> = 1.10 con soporte SQLite y 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
fuente
3

Puede intentar usar el operador CAST como dmci ha mencionado así

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

El dialecto SQL admitido por OGR no tiene CONVERTIR si se recupera correctamente. Puede consultar los documentos para obtener más información. ¡Buena suerte!

RK
fuente
1
Aparentemente UPDATEno es compatible, vea aquí: osgeo-org.1560.x6.nabble.com/… Sin embargo, debería estar en el dialecto SQLite pero tampoco tuve suerte con eso ...
Kay
¿Qué versión de GDAL estás usando?
RK
Estoy usando gdal-17
Kay
1
El dialecto SQLite necesita GDAL / OGR 1.10 .
scruss