2014-11-04 158 views
5

我在使用oracle 11g並嘗試創建空間數據庫,我剛從oracle document 中複製了示例代碼,但是當涉及到更新元數據部分時,它給了一個重複的輸入錯誤,我試圖delete from user_sdo_geom_metadata,它沒有給出任何錯誤,然後試圖再次插入,仍然有重複的輸入錯誤。我也試過select * from user_sdo_geom_metadata,但什麼也沒得到。 任何人有想法爲什麼?感謝在oracle中創建空間數據庫時無法更新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視圖中得到表和列值對重複條目。

回答

4

可以肯定的是,下面顯示了什麼?

SELECT * FROM USER_SDO_GEOM_METADATA; 

字典視圖中的對象名稱以大寫形式存儲。所以,如果你想從空間元數據刪除現有的記錄,你需要做到這一點(注意uppper情況表名):

DELETE FROM USER_SDO_GEOM_METADATA WHERE TABLE_NAME = 'COLA_MARKETS'; 
COMMIT; 
+0

SELECT結果什麼都沒有,0行中選擇,和刪除也顯示出0刪除的行,但是當我試圖再次插入它時,會出現重複錯誤: – user2810081 2014-11-05 01:18:16

+0

*原因:在USER_SDO_GEOM_METADATA視圖中,給定表格和列值爲 的值對有重複條目。 *操作:檢查指定的表格和幾何列名稱 是否正確。在USER_SDO_GEOM_METADATA視圖中,每個表只能有一個條目,幾何形狀爲 列對。 – user2810081 2014-11-05 01:18:35

+0

我發現了這個問題,在用戶「MDSYS」中有一個表SDO_GEOM_METADATA和一個視圖USER_SDO_GEOM_METADATA,我的理解是當我插入USER_SDO_GEOM_METADATA時,數據應該存儲在視圖中,但在我的情況下,數據存儲在該表,而不是視圖,我不知道爲什麼 – user2810081 2014-11-05 01:51:07