2012-03-19 2 views
0

PostgreSQL 데이터베이스에서 실행해야하는 방대한 양의 Insert 문 (Toad for Oracle에서 생성 된)을 포함하고있는 여러 파일이 있습니다.삽입 문에 해당하는 공간 유형

소리도 간단하지만 거기에는 오라클의 특정 공간 데이터 유형이있어 내 노력을 방해하고 있습니다. 데이터를 마이그레이션하기 위해 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

나는 오라클 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 

유사 형식은 꽤 다르다와 오라클이 offerent 무언가가 아닌 경우 (convertable되지 않을 수도 표준에 충실 할 수 있음). 한편,

당신이 그렇게 SDO_ORDINATE_ARRAY(1,1, 5,7)ST_GeomFromText(LINESTRING(1 1, 5 7))

같은 것을로 전환 할 수 PostGIS와의 사람과 오라클 이름의 일부를 대체 할 수있을 수있는 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 
) 
); 

을 볼 때

관련 문제