选择oracle地理空间数据将几何图形插入到不同的表中

问题描述 投票:0回答:1

我试图从一个表中选择 sdo_geometry 并将其插入到另一个表中。 在如何选择几何体方面遇到一些困难。如果我删除几何列,我的代码就可以工作。 所以我认为我的麻烦就在那里。

import cx_Oracle

connection_src = cx_Oracle.connect('source connection string')
cursor_src = connection_src.cursor()
cursor_src.arraysize = 500
cursor_src.execute("""select ID, MDSYS.SDO_UTIL.TO_WKTGEOMETRY(Geometry_column) from src_schema.src_table""")

connection_dst = cx_Oracle.connect('destination connection string')
cursor_dst = connection_dst.cursor()

rows = cursor_src.fetchmany()
cursor_dst.executemany("INSERT INTO dest_schema.dest_table (ID,Geometry_column) VALUES (:1,:2)",rows)

cx_Oracle.DatabaseError: ORA-00932: inconsistent datatypes: expected MDSYS.SDO_GEOMETRY got CLOB

如果我使用这个:MDSYS.SDO_UTIL.EXTRACT(GEOLOC,1) 我收到此错误

Errors in file :
OCI-21500: internal error code, arguments: [kgepop: no error frame to pop to], [], [], [], [], [], [], []
OCI-30757: Message 30757 not found;  product=RDBMS; facility=OCI
python oracle geospatial cx-oracle sdo
1个回答
0
投票

您可以使用

SDO_GEOMETRY
 函数将其从 CLOB
 转换为 
MDSYS.SDO_UTIL.TO_WKTGEOMETRY

当您想要反转它时,请使用

CLOB
 函数将其从 SDO_GEOMETRY
 转换回 
MDSYS.SDO_UTIL.FROM_WKTGEOMETRY

import cx_Oracle

connection_src = cx_Oracle.connect('source connection string')
cursor_src = connection_src.cursor()
cursor_src.arraysize = 500
cursor_src.execute(
    "select ID, MDSYS.SDO_UTIL.TO_WKTGEOMETRY(Geometry_column)"
    " from src_schema.src_table",
)

connection_dst = cx_Oracle.connect('destination connection string')
cursor_dst = connection_dst.cursor()

rows = cursor_src.fetchmany()
cursor_dst.executemany(
    (
        "INSERT INTO dest_schema.dest_table (ID,Geometry_column)"
        " VALUES (:1,MDSYS.SDO_UTIL.FROM_WKTGEOMETRY(:2))"
    ),
    rows,
)
© www.soinside.com 2019 - 2024. All rights reserved.