1

テーブルのジオメトリを、2 つのフィールド (Geometry と SDO_RowID) のみを持つ新しいテーブルに変換しました。

元のテーブルにあるすべてのデータを取得して、新しいテーブルに移動する必要があります。新しいテーブルに列を作成しましたが、For Update Of カーソルを使用してデータを移動しようとしています。

すべてのデータを正しい方法でループする方法/機能させる方法がわかりません。ありがとう。

DECLARE
    CURSOR OTTAWACOLLECTS IS 
    SELECT SHAPE_LENG,
           CLASS,
           SUBCLASSIF,
           ROAD_NAME,
           ROAD_TYPE,
           ROAD_DIREC,
           MUNICIPALI,ADDRESS_LE,
           ADDRESS__1, 
           ADDESSS_RI,
           ADDRESS_RI, ROAD_NAME_
    FROM OTTAWACOLLECTORS
    WHERE OTTAWACOLLECTORS_NAD.SDO_ROWID = ROWID
    FOR UPDATE OF OTTAWACOLLECTORS_NAD;

BEGIN
    FOR ROWID IN OTTAWACOLLECTS
    LOOP
        UPDATE OTTAWACOLLECTORS_NAD
        SET SHAPE_LENG = OTTAWACOLLECTORS.SHAPE_LENG,
            CLASS = OTTAWACOLLECTORS.CLASS,
            SUBCLASSIF = OTTAWACOLLECTORS.SUBCLASSIF,
            ROAD_NAME = OTTAWACOLLECTORS.ROAD_NAME,
            ROAD_TYPE = OTTAWACOLLECTORS.ROAD_TYPE,
            ROAD_DIREC = OTTAWACOLLECTORS.ROAD_DIREC,
            MUNICIPALI = OTTAWACOLLECTORS.MUNICIPALI,
            ADDRESS_LE = OTTAWACOLLECTORS.ADDRESS_LE,
            ADDRESS__1 = OTTAWACOLLECTORS.ADDRESS__1,
            ADDRESSS_RI = OTTAWACOLLECTORS.ADDESSS_RI,
            ADDRESS_RI = OTTAWACOLLECTORS.ADDRESS_RI,
            ROAD_NAME = OTTAWACOLLECTORS.ROAD_NAME_
        WHERE CURRENT OF OTTAWACOLLECTS;
    END LOOP;
END;
4

1 に答える 1

0

関数を使用して新しいテーブルを取得したようですsdo_cs.transform_layer()。IMOあなたはそのアプローチであなたの人生を不必要に複雑にしている. 2 つの簡単な方法があります。

1) 元のテーブルのジオメトリを変換するだけです。または、両方の座標系 (元の座標系と新しい座標系) のジオメトリが必要な場合は、元のテーブルに 2 つ目のジオメトリ列を追加するだけです。「マスター」ジオメトリが更新されると、変換されたジオメトリが自動的に更新されるように、トリガーを介してそれらをリンクすることもできます。

alter table ottawacollectors add geometry_nad do_geometry;
update ottawacollectors set geometry_nad = sdo_cs.transform (geometry, <your new SRID>);
commit;

次に、追加の列にメタデータと空間インデックスを追加します。

利点は、同期を維持する必要がある同じ内容を持つ 2 つの別個のテーブルを扱う必要がないことです。

2) または、変換されたジオメトリを含む元のテーブルの完全なコピーが本当に必要な場合は、次のように、その新しいテーブルを作成して同時に変換します。

create table ottawacollectors_nad as
select ... (all columns) ..., sdo_cs.transform (geometry, <your new SRID>) geometry
from ottawacollectors;

またはさらに簡単です:

create table ottawacollectors_nad as select * from ottawacollectors;

に続く:

update ottawacollectors_nad set geometry = sdo_cs.transform (geometry, <your new SRID>);
commit;

両方とも、メタデータの通常の設定と空間インデックスの作成が続きます。

于 2015-06-12T07:37:39.697 に答える