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

0
分享 2015-11-23
问题描述
使用桌面产品创建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 语句来更新图层的范围。
文章来源:http://blog.csdn.net/liufeng1980423/article/details/49759237

0 个评论

要回复文章请先登录注册