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にエクスポートします。SQLServerは変換で役に立たないため、データをOracleのWGS84(27700)に格納されているため、データをコピーする前にOracleに適用しています。後でSQLServerから取得します。

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 に答える