CÓMO

Insertar en masa atributos st_geometry en Oracle

Last Published: April 25, 2020

Resumen

Las instrucciones proporcionadas describen cómo insertar filas en masa en una tabla de Oracle con un atributo st_geometry para un rendimiento óptimo.

El ejemplo utiliza Oracle PL/SQL para definir una colección, completar la colección con 100 objetos st_geometry y, a continuación, escribirlos en la base de datos utilizando la declaración insert 1 con la función PL/SQL FORALL.

Procedimiento

El procedimiento a continuación define un varray local, que es una colección de objetos st_geometry. El ejemplo comienza obteniendo el SRID para la tabla event_points de la tabla sde.st_geometry_columns. A continuación, consulta la tabla event_points para obtener un objeto st_geometry (solo con el fin de demostrar cómo colocar 100 objetos st_geometry en una colección, un ejemplo real probablemente sería leer geometrías de otro origen). FOR i IN 1..100 LOOP muestra cómo establecer la variable local st_geometry geom y colocar la geometría en la colección gt. Una vez que se hayan establecido 100 geometrías en la colección, el ejemplo utiliza la función FORALL para realizar la inserción masiva en la tabla event_points.


Código:
DECLARE

-- Varray local para recopilar cada geometría
TYPE geom_type IS VARRAY(100) OF sde.st_geometry;
gt geom_type := geom_type();

srid INTEGER;
curs1 INTEGER;
stmt VARCHAR2(512);
nrows NUMBER;
row_oid NUMBER;
geom_txt CLOB;
geom sde.st_geometry;

BEGIN

SELECT srid INTO srid FROM sde.st_geometry_columns WHERE table_name = 'EVENT_POINTS';

curs1 := dbms_sql.open_cursor;

stmt := 'SELECT objectid, sde.st_astext(shape) FROM event_points WHERE objectid = 1';

dbms_sql.parse(curs1,stmt,dbms_sql.native);

dbms_sql.define_column(curs1, 1, row_oid);
dbms_sql.define_column(curs1, 2, geom_txt);

nrows := dbms_sql.execute(curs1);

IF dbms_sql.fetch_rows(curs1) > 0 THEN
dbms_sql.column_value(curs1,1,row_oid);
dbms_sql.column_value(curs1,2,geom_txt);
END IF;

dbms_sql.close_cursor(curs1);

FOR i IN 1..100 LOOP
geom := sde.st_geometry(geom_txt,srid);
gt.extend;
gt(gt.count) := geom;
END LOOP;

FORALL i IN 1..100
INSERT INTO event_points (objectid, shape) VALUES (r46.nextval, gt(i));

gt.delete;

END;
/

Id. de artículo:000010886

Obtener ayuda de expertos en ArcGIS

Contactar con soporte técnico

Descargar la aplicación de soporte de Esri

Ir a las opciones de descarga

Descubrir más sobre este tema