我试图从一个表中选择 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
您可以使用
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,
)