2015-04-28 107 views
0

我有一個SDO_GEOMETRY類型列的Oracle數據庫表。我正在嘗試在該表上編寫一個視圖,並獲取具有不同SRID的SDO_GEOMETRY列。我不想更改原始表格或將值轉換爲不同的SRID。我只想用不同的SID(相同的頂點值)來獲取幾何列。如何實現這一目標?從現有值更改SDO_geometry的SRID而不更改原始值

表是這樣的:

Create Table Locations (CityCode VARCHAR(2), Location SDO_GEOMETRY) 

我想創建例如像這樣的觀點:

CREATE OR REPLACE VIEW VW_Locations AS 
SELECT 
    CityCode, 
    SDO_GEOMETRY(Location, <NEW_SRID>) 
FROM Locations 

我試着用WKT作爲參數使用構造爲SDO_GEOMETRY,但我不能因爲我的表中的幾何值是3D,Oracle不支持3D SDO_GEOMETRY值的WKT/WKB轉換。這一個適用於二維幾何:

CREATE OR REPLACE VIEW VW_Locations AS 
SELECT 
    CityCode, 
    SDO_GEOMETRY(SDO_UTIL.TO_WKTGEOMETRY(Location), <NEW_SRID>) AS Loc 
FROM Locations 

回答

0

我嘗試了同樣的方法,你,和有同樣的問題(TO_WKTGEOMETRY出口僅適用於二維幾何形狀)。

我目前的做法是使用自定義功能通過對象點符號應用SRID:

CREATE OR REPLACE FUNCTION APPLY_SRID 
(
    GEOM IN OUT MDSYS.SDO_GEOMETRY 
, SRID IN NUMBER DEFAULT 8307 
) RETURN MDSYS.SDO_GEOMETRY AS 
BEGIN 
    GEOM.SDO_SRID := SRID; 
    RETURN GEOM; 
END APPLY_SRID; 

在自己的代碼,你可以使用這個如下:

CREATE OR REPLACE VIEW VW_Locations AS 
SELECT 
    CityCode, 
    APPLY_SRID(Location, <NEW_SRID>) 
FROM Locations