2013-03-21 77 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