2012-03-19 13 views
0

Postgresqlデータベースで実行する必要がある膨大な量のInsert文(Toad for Oracleによって生成された)を含む多数のファイルがあります。insert文の等価空間型

私は知っているだけでなく、オラクル固有の空間データ型があり、私の努力を妨げています。私はこれをSwisSQLからSDO2Shpに変換するためにいくつかのツールを使用してデータを移行しようとしましたが、何も助けがありませんでした。私の唯一の試みは、C#プログラムを使ってファイルをオープンし、 postgisで動作し、ファイルを再び保存するタイプを使用します。問題は、どのタイプを私がOracleのものに置き換えることができないか、あるいは私が使用しなければならないフォーマットや構文を知らないことです。

以前はSQL Serverを使用していたので、postgresqlとpostgisには非常に新しく、Oracleの知識も限られています。

ここに、Insertステートメントの例を示します。テーブルのサイズは同じですが、マップ上のズームレベルごとに異なるデータを使用しているため、すべて同じ形式です。

Insert into CLUSTER_1000M 
(CLUSTER_ID, CELL_GEOM, CELL_CENTROID) 
Values 
(4410928, 
"MDSYS"."SDO_GEOMETRY"(2003,81989,NULL, 
"MDSYS"."SDO_ELEM_INFO_ARRAY"(1,1003,3,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL), 
"MDSYS"."SDO_ORDINATE_ARRAY"(80000,106280,81000,107280,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL)), 
"MDSYS"."SDO_GEOMETRY"(2001,81989, 
"MDSYS"."SDO_POINT_TYPE"(80500,106780,NULL),NULL,NULL)); 

私はどのようにこれをPostgisで動作する形式にすることができますか?

しかし、データを見て、私は変換が可能になるとは思わない(それはあるかもしれないが、努力は巨大であるかもしれない):

答えて

1

は、私は、Oracle GISの実装がどのように機能するかについては考えています。

方法を見PostGIS defines Geometry

INSERT INTO geotable (the_geom, the_name) 
    VALUES (ST_GeomFromText('POINT(-126.4 45.32)', 312), 'A Place'); 

PostGISには、データを保存/表示する方法についてstandardsに続き、方法はこれを行うには、開発者を支援しません提供しています。この変換はほとんどがwith functionsで、その名前に*from*が含まれています。だから、lineから適切なデータを作成するために、出力はalineオラクルからあなたの例の出力から判断

SELECT ST_LineFromWKB(ST_AsBinary(ST_GeomFromText('LINESTRING(1 2, 3 4)'))) AS aline, 
     ST_LineFromWKB(ST_AsBinary(ST_GeomFromText('POINT(1 2)'))) IS NULL AS null_return; 

aline       | null_return 
------------------------------------------------ 
010200000002000000000000000000F ... | t 

に似て、フォーマットはかなり異なっており、Oracleはその何かをofferentされていない場合(変換可能ではないかもしれません標準に固執することができます)。

Oracle example

INSERT INTO cola_markets VALUES(
    1, 
    'cola_a', 
    SDO_GEOMETRY(
    2003, -- two-dimensional polygon 
    NULL, 
    NULL, 
    SDO_ELEM_INFO_ARRAY(1,1003,3), -- one rectangle (1003 = exterior) 
    SDO_ORDINATE_ARRAY(1,1, 5,7) -- only 2 points needed to 
      -- define rectangle (lower left and upper right) with 
      -- Cartesian-coordinate data 
) 
); 

を見たときに一方、あなたは、PostGISのためのものを使用したOracleの名前の一部を交換することができるかもしれない、そうSDO_ORDINATE_ARRAY(1,1, 5,7)ST_GeomFromText(LINESTRING(1 1, 5 7))

のようなものになるかもしれません