Oracle insert语句的等效空间类型
我有许多文件包含大量Insert语句(由Toad for Oracle生成),需要在Postgresql数据库上运行这些语句 听起来很简单,我知道,但也有oracle特定的空间数据类型阻碍了我的工作。我尝试使用许多工具(从SwisSQL到SDO2Shp)来迁移数据,但都没有任何帮助,因此我剩下的唯一尝试计划是拿出一个C#程序来打开文件,将oracle特定的类型替换为可以在postgis中工作的类型,然后再次保存文件。问题是,我不知道我可以用Oracle的类型替换哪些类型,也不知道我必须使用的格式或语法 我对postgresql和postgis非常陌生,我的oracle知识也很有限,因为我以前使用过SQL Server 下面是Insert语句的一个示例。它们都将具有与此相同的格式,因为表格相同,但地图上不同缩放级别的数据不同Oracle insert语句的等效空间类型,oracle,postgresql,postgis,Oracle,Postgresql,Postgis,我有许多文件包含大量Insert语句(由Toad for Oracle生成),需要在Postgresql数据库上运行这些语句 听起来很简单,我知道,但也有oracle特定的空间数据类型阻碍了我的工作。我尝试使用许多工具(从SwisSQL到SDO2Shp)来迁移数据,但都没有任何帮助,因此我剩下的唯一尝试计划是拿出一个C#程序来打开文件,将oracle特定的类型替换为可以在postgis中工作的类型,然后再次保存文件。问题是,我不知道我可以用Oracle的类型替换哪些类型,也不知道我必须使用的格式
Insert into CLUSTER_1000M
(CLUSTER_ID, CELL_GEOM, CELL_CENTROID)
Values
(4410928,
"MDSYS"."SDO_GEOMETRY"(2003,81989,NULL,
"MDSYS"."SDO_ELEM_INFO_ARRAY"(1,1003,3,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
"MDSYS"."SDO_ORDINATE_ARRAY"(80000,106280,81000,107280,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL)),
"MDSYS"."SDO_GEOMETRY"(2001,81989,
"MDSYS"."SDO_POINT_TYPE"(80500,106780,NULL),NULL,NULL));
如何将其转换为可与postgis一起使用的格式 我不知道Oracle GIS实现是如何工作的: 但从数据来看,我认为转换是不可能的(可能是这样,但努力可能是巨大的) 看看路 PostGIS讲述了如何显示/存储数据,并提供了帮助开发人员实现这一点的方法。这种转换主要是以*为名称的
*转换。因此,要从中创建正确的数据,输出类似于aline
SELECT ST_LineFromWKB(ST_AsBinary(ST_GeomFromText('LINESTRING(1 2, 3 4)'))) AS aline,
ST_LineFromWKB(ST_AsBinary(ST_GeomFromText('POINT(1 2)'))) IS NULL AS null_return;
aline | null_return
------------------------------------------------
010200000002000000000000000000F ... | t
从Oracle的示例输出判断,格式非常不同,可能无法转换(如果Oracle不提供能够遵守标准的内容)
另一方面,当看到
您可能可以将一些Oracle名称替换为PostGIS的名称,因此SDO_-ordination_数组(1,1,5,7)
可能会变成类似于ST_-GeomFromText(LINESTRING(1,5 7))
我不知道Oracle GIS实现是如何工作的:
但从数据来看,我认为转换是不可能的(可能是这样,但努力可能是巨大的)
看看路
PostGIS讲述了如何显示/存储数据,并提供了帮助开发人员实现这一点的方法。这种转换主要是以*
为名称的*转换。因此,要从中创建正确的数据,输出类似于aline
SELECT ST_LineFromWKB(ST_AsBinary(ST_GeomFromText('LINESTRING(1 2, 3 4)'))) AS aline,
ST_LineFromWKB(ST_AsBinary(ST_GeomFromText('POINT(1 2)'))) IS NULL AS null_return;
aline | null_return
------------------------------------------------
010200000002000000000000000000F ... | t
从Oracle的示例输出判断,格式非常不同,可能无法转换(如果Oracle不提供能够遵守标准的内容)
另一方面,当看到
您可能可以将一些Oracle名称替换为PostGIS的名称,因此SDO_坐标数组(1,1,5,7)
可能会变成类似ST_GeomFromText(LINESTRING(1,5,7))
INSERT INTO cola_markets VALUES(
1,
'cola_a',
SDO_GEOMETRY(
2003, -- two-dimensional polygon
NULL,
NULL,
SDO_ELEM_INFO_ARRAY(1,1003,3), -- one rectangle (1003 = exterior)
SDO_ORDINATE_ARRAY(1,1, 5,7) -- only 2 points needed to
-- define rectangle (lower left and upper right) with
-- Cartesian-coordinate data
)
);