CREATE OR REPLACE FUNCTION sdo2sde(geo SDO_GEOMETRY) RETURN st_geometry IS lx number; --類型 (點、線、面) coord varchar2(1000); --座標序列 num number; i number; st st_geometry; BEGIN lx := geo.SDO_GTYPE; coord := ''; i := 1; if lx = 2001 then --點 coord := geo.SDO_POINT.X || ' ' || geo.SDO_POINT.Y; st := sde.ST_PointFromText('point( '|| coord ||' )',0); elsif lx = 2002 then --線 num := geo.SDO_ORDINATES.COUNT(); while i<= num loop if mod(i, 2)=1 then --奇數 coord := coord || geo.SDO_ORDINATES(i) || ' '; elsif mod(i, 2)=0 then --偶數 coord := coord || geo.SDO_ORDINATES(i) || ','; end if; i := i+1; end loop; coord := substr(coord, 1, length(coord)-1); --去除最後一個逗號 st := sde.ST_LineFromText('linestring( '|| coord ||' )', 0); elsif lx = 2003 then --面 num := geo.SDO_ORDINATES.COUNT(); while i<= num loop if mod(i, 2)=1 then --奇數 coord := coord || geo.SDO_ORDINATES(i) || ' '; elsif mod(i, 2)=0 then --偶數 coord := coord || geo.SDO_ORDINATES(i) || ','; end if; i := i+1; end loop; coord := substr(coord, 1, length(coord)-1); --去除最後一個逗號 st := sde.ST_PolyFromText('polygon(( '|| coord ||' ))', 0); end if; RETURN st; END;