не может обновить user_sdo_geom_metadata при создании пространственной базы данных в оракуле

я использовал oracle 11g и пытался создать пространственную базу данных, я просто скопировал пример кода из документ Oracle, но когда дело доходит до обновления части метаданных, он выдает ошибку дублирования записи, и я попробовал delete from user_sdo_geom_metadata, и он не дал никакой ошибки, а затем снова попытался вставить, все еще получил ошибку дублирования записи. Я также пробовал select * from user_sdo_geom_metadata, но ничего не получил. у кого-нибудь есть идеи, почему? спасибо

Пример кода:

CREATE TABLE cola_markets (
mkt_id NUMBER PRIMARY KEY,
name VARCHAR2(32),
shape SDO_GEOMETRY);

INSERT INTO cola_markets VALUES(
1,
'cola_a',
SDO_GEOMETRY(
  2003,  -- two-dimensional polygon
  NULL,
  NULL,
  SDO_ELEM_INFO_ARRAY(1,1003,3), -- one rectangle (1003 = exterior)
  SDO_ORDINATE_ARRAY(1,1, 5,7) -- only 2 points needed to
      -- define rectangle (lower left and upper right) with
      -- Cartesian-coordinate data
));

INSERT INTO user_sdo_geom_metadata
(TABLE_NAME,
 COLUMN_NAME,
 DIMINFO,
 SRID)
VALUES (
'cola_markets',
'shape',
SDO_DIM_ARRAY(   -- 20X20 grid
SDO_DIM_ELEMENT('X', 0, 20, 0.005),
SDO_DIM_ELEMENT('Y', 0, 20, 0.005)
 ),
NULL   -- SRID
);

причина ошибки: в представлении user_sdo_geom_metadata есть повторяющиеся записи для пары значений таблицы и столбца give.


person user2810081    schedule 04.11.2014    source источник


Ответы (1)


Просто чтобы быть уверенным, что показывает следующее?

SELECT * FROM USER_SDO_GEOM_METADATA; 

Имена объектов в представлениях словаря сохраняются в верхнем регистре. Поэтому, если вы хотите удалить существующие записи из пространственных метаданных, вам нужно сделать это (обратите внимание на имя таблицы в верхнем регистре):

DELETE FROM USER_SDO_GEOM_METADATA WHERE TABLE_NAME = 'COLA_MARKETS';
COMMIT;
person Albert Godfrind    schedule 04.11.2014
comment
ВЫБОР РЕЗУЛЬТАТА НИЧЕГО, 0 ВЫБРАННЫХ СТРОК, И УДАЛЕНИЕ ТАКЖЕ ПОКАЗЫВАЕТ 0 УДАЛЕННЫХ СТРОК, НО КОГДА Я ПЫТАЮСЬ ВСТАВИТЬ СНОВА, ЭТО ДАЕТ ДУБЛИРУЮЩУЮ ОШИБКУ: - person user2810081; 05.11.2014
comment
*Причина: в представлении USER_SDO_GEOM_METADATA имеются повторяющиеся записи для данной пары значений таблицы и столбца. *Действие: проверьте правильность указанных имен таблиц и столбцов геометрии. В каждой таблице должна быть только одна запись, пара столбцов геометрии в представлении USER_SDO_GEOM_METADATA. - person user2810081; 05.11.2014
comment
я обнаружил проблему, в пользователе MDSYS есть таблица SDO_GEOM_METADATA и представление USER_SDO_GEOM_METADATA, я понимаю, что когда я вставляю в USER_SDO_GEOM_METADATA, данные должны храниться в представлении, но в моем случае данные хранятся в таблице, не вид, я понятия не имею, почему - person user2810081; 05.11.2014
comment
Именно так это и должно работать: когда вы вставляете в представление USER_SDO_GEOM_METADATA, триггер в этом представлении автоматически вставляет строку в базовую таблицу SDO_GEOM_METADATA_TABLE и становится видимой в представлении. Можете ли вы сделать SELECT * FROM MDSYS. SDO_GEOM_METADATA_TABLE и показать результат? - person Albert Godfrind; 07.11.2014
comment
Под каким пользователем вы запускаете пример? - person Albert Godfrind; 07.11.2014
comment
Я сам создал пользователя и попытался использовать системного пользователя по умолчанию, это сработало. - person user2810081; 19.11.2014
comment
Вы имеете в виду, что использовали SYSTEM ? Или МДСИС? Или СИС? Это все системные пользователи. Вы должны оставить их в покое и определенно никогда не создавать никаких пользовательских данных (таблиц или чего-то еще) ни в одном из них. Всегда используйте учетные записи для конкретных приложений, т. е. учетные записи, которые вы создаете сами. - person Albert Godfrind; 19.11.2014