2013-03-21 118 views
0

我正在使用ORACLE SQL DEVELOPER。 我已經創建了表查詢空間數據庫

Create table building(
building_ID varchar2(5) Primary Key, 
building_name Varchar2(50), 
shape MDSYS.SDO_GEOMETRY); 

INSERT INTO USER_SDO_GEOM_METADATA 
    VALUES (
    'building', 
    'shape', 
    SDO_DIM_ARRAY( -- 20X20 grid 
    SDO_DIM_ELEMENT('X', 0, 100, 1), 
    SDO_DIM_ELEMENT('Y', 0, 100, 1) 
    ), 
    NULL -- SRID 
); 

CREATE INDEX building_index 
    ON building(shape) 
    INDEXTYPE IS MDSYS.SPATIAL_INDEX; 

和插入使用通過executeUpdate()的Java程序的值

現在我查詢使用

select * from building; 

Oracle數據庫,並顯示所有的行,輸出爲 - enter image description here

但是當我查詢oracle數據庫時

SELECT building_ID 
    FROM building 
    WHERE building_name = 'SSL'; OR 

    SELECT c.shape.GET_GTYPE() 
    FROM building c WHERE c.building_name = 'BHE'; 

或同樣的語句與where子句沒有行出現。有什麼問題請幫忙

+0

如果你選擇了building_name,dump(building_name)FROM building',你會得到什麼?例如,實際的建築物名稱最後是否有額外的空間? – 2013-03-21 21:59:10

+0

您的查詢輸出的代碼段 - PSA \t Typ = 1 Len = 4:32,80,83,65 OHE \t Typ = 1 Len = 4:32,79,72,69 BHE \t Typ = 1 Len = 4:32,66,72,69是的,我在建築物名稱前有一個空白區域。並添加空白區域給我所需的輸出。謝謝..但是有沒有辦法消除這個空白問題? – 2013-03-21 22:07:19

回答

1

您的Java應用程序似乎插入了具有前導空間的數據。在DUMP輸出中,您會看到每個數據元素的長度是4,第一個字節是32,它映射到ASCII charcter set中的空格。

您應該能夠在前面加上一個空格

SELECT * 
    FROM building 
WHERE building_name = ' SSL' 

,或者你可以修改你的數據刪除前導空格和使用您現有的查詢來查詢數據。

UPDATE building 
    SET building_name = TRIM(building_name); 

假設你這樣做,你還需要修改您的Java應用程序,以便它不插入在未來領先的空間。

+0

真棒@justin – 2013-03-21 22:21:39