GEOSQL插入数据 ArcGIS Desktop不显示的问题

问题描述

使用桌面产品创建FeatureClass,并使用ArcSDE GEOSQL函数,有些数据成功插入后,使用Desktop查看不到数据,但是使用Desktop插入的数据都能显示出来。

问题诊断过程

使用Desktop插入的数据是能看得到,直接使用SQL插入看不到,说明两个过程执行的SQL不同,桌面产品除了执行了数据插入的SQL语句外,应该还执行了别的SQL语句,因此打开数据库的后台跟踪,查看Desktop插入数据所执行的SQL语句。

使用Desktop产品创建了一个点图层后,并插入了4个点,其后台所执行的SQL语句如下:

查找图层所对应的SEQUENCE对象
PARSING IN CURSOR #748699192 len=119 dep=0 uid=111 oct=3 lid=111 tim=19850866863 hv=870130079 ad=’7ff80ee5350’ sqlid=’d55a4v8txu8cz’
SELECT /* ESRI GDM_9 */ increment_by FROM all_sequences WHERE sequence_owner = :owner AND sequence_name = :sequence
END OF STMT
BINDS #748699192:
Bind#0
oacdty=01 mxl=32(14) mxlc=00 mal=00 scl=00 pre=00
oacflg=20 fl2=1000000 frm=01 csi=852 siz=160 off=0
kxsbbbfp=2f0c4c98 bln=32 avl=07 flg=05
value=”TESTDDY”
Bind#1
oacdty=01 mxl=128(08) mxlc=00 mal=00 scl=00 pre=00
oacflg=20 fl2=1000000 frm=01 csi=852 siz=0 off=32
kxsbbbfp=2f0c4cb8 bln=128 avl=04 flg=01
value=”R658”
得到插入的数据的OBJECTID
PARSING IN CURSOR #748029136 len=458 dep=0 uid=111 oct=47 lid=111 tim=19850867383 hv=2771307631 ad=’7ff80d672e0’ sqlid=’90gz1aukkxm3g’
DECLARE pipe_result INTEGER; temporary INTEGER; BEGIN /* ArcSDE plsql */ pipe_result := DBMS_PIPE.RECEIVE_MESSAGE (:pipe_name,0); :pipe_result := pipe_result;IF pipe_result = 0 THEN DBMS_PIPE.UNPACK_MESSAGE (temporary); :id_start := temporary; DBMS_PIPE.UNPACK_MESSAGE (temporary); :id_count := temporary; END IF;:sql_code := SDE.sde_util.SE_SUCCESS; EXCEPTION WHEN OTHERS THEN DBMS_PIPE.RESET_BUFFER; :sql_code := SQLCODE; :error_string := SQLERRM; END;
END OF STMT
BINDS #748029136:
Bind#0
oacdty=01 mxl=128(126) mxlc=00 mal=00 scl=00 pre=00
oacflg=00 fl2=1000000 frm=01 csi=852 siz=2224 off=0
kxsbbbfp=2f0c4488 bln=128 avl=16 flg=05
value=”ArcSDE_IdPipe658”
Bind#1
oacdty=02 mxl=22(22) mxlc=00 mal=00 scl=00 pre=00
oacflg=00 fl2=1000000 frm=00 csi=00 siz=0 off=128
kxsbbbfp=2f0c4508 bln=22 avl=00 flg=01
Bind#2
oacdty=02 mxl=22(22) mxlc=00 mal=00 scl=00 pre=00
oacflg=00 fl2=1000000 frm=00 csi=00 siz=0 off=152
kxsbbbfp=2f0c4520 bln=22 avl=00 flg=01
Bind#3
oacdty=02 mxl=22(22) mxlc=00 mal=00 scl=00 pre=00
oacflg=00 fl2=1000000 frm=00 csi=00 siz=0 off=176
kxsbbbfp=2f0c4538 bln=22 avl=00 flg=01
Bind#4
oacdty=02 mxl=22(22) mxlc=00 mal=00 scl=00 pre=00
oacflg=00 fl2=1000000 frm=00 csi=00 siz=0 off=200
kxsbbbfp=2f0c4550 bln=22 avl=00 flg=01
Bind#5
oacdty=01 mxl=2000(1024) mxlc=00 mal=00 scl=00 pre=00
oacflg=02 fl2=1000000 frm=01 csi=852 siz=0 off=224
kxsbbbfp=2f0c4568 bln=2000 avl=00 flg=01
WAIT #748029136: nam=’SQL*Net message to client’ ela= 1 driver id=1413697536 #bytes=1 p3=0 obj#=-1 tim=19850867828
EXEC #748029136:c=0,e=483,p=0,cr=0,cu=0,mis=0,r=1,dep=0,og=1,plh=0,tim=19850867852
WAIT #748029136: nam=’SQL*Net message from client’ ela= 216 driver id=1413697536 #bytes=1 p3=0 obj#=-1 tim=19850868105
PARSING IN CURSOR #390171408 len=37 dep=0 uid=111 oct=3 lid=111 tim=19850869191 hv=2888896792 ad=’7ff83e60d60’ sqlid=’5rgu1zaq3248s’
SELECT TESTDDY.R658.NEXTVAL FROM dual
END OF STMT
实际执行的SQL语句
PARSING IN CURSOR #390171408 len=162 dep=0 uid=111 oct=2 lid=111 tim=19850876554 hv=1643418104 ad=’7ff83a41658’ sqlid=’1kruvx5hz94gs’
INSERT INTO TESTDDY.testpoing TESTPOING (OBJECTID,SHAPE) VALUES ( :a1,SDE.ST_GEOMETRY(:st1,:st2,:st3,:st4,:st5,:st6,:st7,:st8,:st9,:st10,:st11,:st12,:st13,:st14))
END OF STMT
PARSE #390171408:c=0,e=289,p=0,cr=0,cu=0,mis=1,r=0,dep=0,og=1,plh=0,tim=19850876554
更新图层范围的SQL语句
PARSING IN CURSOR #748447400 len=753 dep=0 uid=111 oct=47 lid=111 tim=19850904447 hv=1140308271 ad=’7ff80c4f920’ sqlid=’5xu0sh11zgf9g’
DECLARE layer_id SDE.layers_util.layer_id_t; minx SDE.layers.minx%TYPE; miny SDE.layers.miny%TYPE; maxx SDE.layers.maxx%TYPE; maxy SDE.layers.maxy%TYPE; minz SDE.layers.minz%TYPE; minm SDE.layers.minm%TYPE; maxz SDE.layers.maxz%TYPE; maxm SDE.layers.maxm%TYPE; BEGIN /* ArcSDE plsql */ layer_id := :wanted_layer_id; minx := :new_minx; miny := :new_miny; maxx := :new_maxx; maxy := :new_maxy; minz := :new_minz; minm := :new_minm; maxz := :new_maxz; maxm := :new_maxm; SDE.layers_util.update_layer_extent (layer_id, minx, miny, maxx, maxy, minz, minm, maxz, maxm);:sql_code := SDE.sde_util.SE_SUCCESS; EXCEPTION WHEN OTHERS THEN :sql_code := SQLCODE; :error_string := SQLERRM; END;
END OF STMT

从上面执行的语句可以看出,Desktop除了执行insert语句,还更新了sde.layers这种系统表的minx,miny,maxx,maxy四个字段。

解决方法:

使用insert SQL语句插入数据后,如果插入的数据超出了现有图层数据的范围,还需要手动的执行

update sde.layers set minx=:minx,miny=:miny,maxx=:maxx,maxy=:maxy 语句来更新图层的范围。

你可能感兴趣的:(数据库)