空间数据库课程设计报告 chapter-5
IMP SYSTEM/MANAGER FROMUSER=spatial TOUSER=scott FILE=customers.dmp
在不同的Oracle数据库之间传输数据的另一种机制是可传输的表空间,利用这种机制,可以在两个数据之间传输整个表空间,如程序5-12:
程序5-12
CONNECT SPATIAL/SPATIAL
EXECUTE SDO_UTIL.PREPARE_FOR_TTS('TBS'); CONNECT SYSTEM/MANAGER AS SYSDBA
EXECUTE DBMS_TTS.TRANSPORT_SET_CHECK('TBS', TRUE); ALTER TABLESPACE TBS READ ONLY; EXIT
导入rans_ts.dmp中的内容:
程序5-13
IMP USERID = \TRANSPORT_TABLESPACE=Y FILE=trans_ts.dmp DATAFILES='sdo_tts.dbf' TABLESPACES=tbs
导入后,应该改变表空间TBS以允许对其进行读/写操作,并执行SDO_UTIL.INITIALIZE_INDEXES_FOR_TTS过程来启用空间索引:
程序5-14
CONNECT SYS/
ALTER TABLESPACE TBS READ WRITE; CONNECT spatial/spatial;
EXEC SDO_UTIL.INITIALIZE_INDEXES_FOR_TTS;
SDO_UTIL.INITIALIZE_INDEXES_FOR_TTS函数重新启用了空间索引,但是如果尾格式不同,空间索引需要通过ALTER INDEX REBUILD命令进行重建:
程序5-15
ALTER INDEX customers_sidx REBUILD;
SDO_MIGRATE程序包中类似于TO_CURRENT的函数可以把空间数据从以前的版本中移植到当前版本中:
程序5-16
EXECUTE SDO_MIGRATE.TO_CURRENT('customers', 'location', 100);
其中第三个参数规定了提交间隔为100,也就是每移植customers表的100行数据就提交一次。
(三) 在SDO_GEOMETRY和WKT/WKB之间转换
SQL/MM为几何体定义了WKT(熟知文本)和WKB(熟知二进制)格式,程序5-20显示了怎样把一个SDO_GEOMETRY对象转换成WKT格式,使用SDO_GEOMETRY数据类型的GET_WKT方法将WKT作为一个字符大对象返回。程序5-21显示了另一个使用SDO_UTIL.TO_WKTGEOMETRY函数得到同样结果的方法:
程序5-20
SELECT a.location.GET_WKT() wkt FROM customers a WHERE id=1;
空间数据库课程设计报告 chapter-5
程序5-21
SELECT SDO_UTIL.TO_WKTGEOMETRY(a.location) wkt FROM customers a WHERE id=1;
(四) 在GML和SDO_GEOMETRY之间转换数据
要将Spatial数据转换成GML2.0(仅支持二维数据类型),可以使用SDO_UTIL.TO_GMLGEOMETRY函数,这个函数使用一个SDO_GEOMETRY类型的输入参数,返回一个GML编码的CLOB形式的文档段。程序5-22说明了如何把客户位置转换为GML文档段:
程序5-22
SELECT TO_CHAR(SDO_UTIL.TO_GMLGEOMETRY(location)) gml_location FROM customers WHERE id=1;
空间数据库课程设计报告 chapter-5
为了将spatial数据转换成GML3.1.1(支持三维数据类型),可以使用SDO_UTIL程序版中的TO_GMLGEOMETRY311函数,程序5-23说明了怎样把一个与轴平行的立方体盒转换成GML311:
程序5-23
SELECT TO_CHAR(
SDO_UTIL.TO_GML311GEOMETRY ( SDO_GEOMETRY (
3008, -- SDO_GTYPE format: D00T. Set to 3008 for a 3-dimensional Solid NULL, -- No coordinate system
NULL, --- No data in SDO_POINT attribute SDO_ELEM_INFO_ARRAY (
1, -- Offset of a Simple solid element 1007, --- Etype for a Simple solid 3 -- Indicates an axis-aligned box ),
SDO_ORDINATE_ARRAY (
0,0,0, --min-corners for box 4,4,4 --min-corners for box ) ) )
) AS GML_GEOMETRY FROM DUAL;
在SDO_UTIL程序包中,可以找到两个函数:FROM_GMLGEOMETRY和FROM_GML311GEOMETRY,它们可以转换GML为SDO_GEOMETRY,程序5-25中列举的SQL语句把程序5-23输出的GMLGEOMETRY转回为SDO_GEOMETRY:
程序5-25
SELECT SDO_UTIL.FROM_GML311GEOMETRY( TO_CLOB(
空间数据库课程设计报告 chapter-5
'
0.0 0.0 0.0 0.0 4.0 0.0 4.0 4.0 0.0 4.0 0.0 0.0 0.0 0.0 0.0
4.0 4.0 4.0 0.0 4.0 4.0 0.0 0.0 4.0 4.0 0.0 4.0 4.0 4.0 4.0
0.0 0.0 0.0 4.0 0.0 0.0 4.0 0.0 4.0 0.0 0.0 4.0 0.0 0.0 0.0
空间数据库课程设计报告 chapter-5 0.0 0.0 0.0 0.0 0.0 4.0 0.0 4.0 4.0 0.0 4.0 0.0 0.0 0.0 0.0
4.0 4.0 4.0 4.0 4.0 0.0 0.0 4.0 0.0 0.0 4.0 4.0 4.0 4.0 4.0
4.0 4.0 4.0 4.0 0.0 4.0 4.0 0.0 0.0 4.0 4.0 0.0 4.0 4.0 4.0