0

我有以下语句,我试图针对 Oracle 表运行,以便将一组结果返回导出:

SELECT 
   a.CLUSTER_ID, 
   SDO_CS.transform(a.CELL_GEOM, 4326).GET_WKT()  CELL_GEOM, 
   SDO_CS.transform(a.CELL_CENTROID, 4326).GET_WKT()  CELL_CENTROID, 
   SDO_CS.transform(a.CLUSTER_CENTROID, 4326).GET_WKT()  CLUSTER_CENTROID, 
   a.NUM_POINTS, 
   a.FEATURE_PK, 
   SDO_CS.transform(a.CLUSTER_EXTENT, 4326).GET_WKT()  CLUSTER_EXTENT
FROM HIGHWAYS.CLUSTER_128000M a

当我对我的数据集运行它时,我收到以下错误:

ORA-06531: Reference to uninitialized collection
ORA-06512: at "MDSYS.SDO_CS", line 2553
ORA-06512: at "MDSYS.SDO_CS", line 2678

这是因为(我相信)数据库中的某些字段可能为空。如果该字段为空,我如何修改代码以考虑到这一点并且不尝试应用转换?代码运行后,我将导出到 SQL Server,由于 SQL Server 在转换时无用,我在复制数据之前在 Oracle 中应用它们,因为它存储在 Oracle 中的 WGS84 (27700) 中,我需要它在 4326 时稍后从 SQL Server 中检索它。

4

1 回答 1

1

尝试:

SELECT a.CLUSTER_ID,
       CASE
           WHEN a.CELL_GEOM IS NOT NULL THEN SDO_CS.transform(a.CELL_GEOM, 4326).GET_WKT()
           ELSE a.CELL_GEOM.GET_WKT()
       END CELL_GEOM,
       CASE
           WHEN a.CELL_CENTROID IS NOT NULL THEN SDO_CS.transform(a.CELL_CENTROID, 4326).GET_WKT()
           ELSE a.CELL_CENTROID.GET_WKT()
       END CELL_CENTROID,
       CASE
           WHEN a.CLUSTER_CENTROID IS NOT NULL THEN SDO_CS.transform(a.CLUSTER_CENTROID, 4326).GET_WKT()
           ELSE a.CLUSTER_CENTROID.GET_WKT()
       END CLUSTER_CENTROID,
       a.NUM_POINTS,
       a.FEATURE_PK,
       CASE
           WHEN a.CLUSTER_EXTENT IS NOT NULL THEN SDO_CS.transform(a.CLUSTER_EXTENT, 4326).GET_WKT()
           ELSE a.CLUSTER_EXTENT.GET_WKT()
       END CLUSTER_EXTENT
FROM HIGHWAYS.CLUSTER_128000M a
于 2012-06-13T09:09:25.100 回答