2013-03-21 4 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; 

и вставить значения с помощью Java программы, используя executeUpdate()

теперь запрос к базе данных оракула, используя

select * from building; 

и появляется все строки, выход IS- enter image description here

, но когда я запрашиваю базу данных оракула

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

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

или аналогичные утверждения с предложением, где строка не отображается. В чем проблема, пожалуйста, помогите

+0

Что вы можете получить, если вы выбрали имя здания, дамп (имя_конструкции) FROM building'? Возможно ли, например, что у фактических названий зданий есть дополнительные пробелы в конце? –

+0

фрагмент кода выхода вашего query- PSA \t Typ = 1 Len = 4: 32,80,83,65 OHE \t Typ = 1 Len = 4: 32,79,72,69 ППТ \t Typ = 1 Len = 4: 32,66,72,69, и да, у меня есть одно пустое пространство перед именем здания. и добавление пробела дает мне желаемый результат .. Спасибо .. но есть ли способ устранить эту проблему с пробелом? –

ответ

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

awesome @justin –

Смежные вопросы