1

次のコードを使用して、Oracle にテーブルを作成しました。

CREATE TABLE Roads ( 
 TYPE VARCHAR2(40), 
 ADMN_CLASS VARCHAR2(20), 
 TOLL_RD VARCHAR2(10), 
 RTE_NUM1 VARCHAR2(3), 
 RTE_NUM2 VARCHAR2(3), 
 ROUTE VARCHAR2(40), 
 LOCATION MDSYS.SDO_GEOMETRY);

LOCATION次に、ジオメトリを保持する列にメタデータを追加したいと思いました。

INSERT INTO USER_SDO_GEOM_METADATA 
(TABLE_NAME, COLUMN_NAME, DIMINFO, SRID) 
VALUES 
('ROADS', 'LOCATION', 
 MDSYS.SDO_DIM_ARRAY 
 ( MDSYS.SDO_DIM_ELEMENT('X', -180, 180, 0.5), 
 MDSYS.SDO_DIM_ELEMENT('Y', -90, 90, 0.5) 
 ), 
 8256 
); 

ただし、エラーが発生します。

Error report -
SQL Error: ORA-13223: duplicate entry for ROADS.LOCATION in SDO_GEOM_METADATA
ORA-06512: at "MDSYS.MD", line 1723
ORA-06512: at "MDSYS.MDERR", line 17
ORA-06512: at "MDSYS.SDO_GEOM_TRIG_INS1", line 48
ORA-04088: error during execution of trigger 'MDSYS.SDO_GEOM_TRIG_INS1'
13223. 00000 -  "duplicate entry for %s in SDO_GEOM_METADATA"
*Cause:    There are duplicate entries for the given table and column
           value pair in the USER_SDO_GEOM_METADATA view.
*Action:   Check that the specified table and geometry column names
           are correct. There should be only one entry per table, geometry
           column pair in the USER_SDO_GEOM_METADATA view.

以前にこのテーブルを作成したことがないため、値が重複していると表示される理由がわかりません。また、テーブルと列の名前が正しいことを確認するように指示されています。

4

2 に答える 2

1

テーブルを作成し、挿入ステートメントを実行しました。

もう一度実行すると、問題を再現できました。

エラー「SQL エラー: ORA-13223: SDO_GEOM_METADATA 内の ROADS.LOCATION のエントリが重複しています」は、間違いなく重複データを示しています。

このトリガー MDSYS.SDO_GEOM_TRIG_INS1 は、次の MDSYS テーブルで count(*) 検証を実行し、rowcount が != 0 の場合に -13223 例外を発生させます。

SQL> desc mdsys.SDO_GEOM_METADATA_TABLE
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 SDO_OWNER                                 NOT NULL VARCHAR2(32)
 SDO_TABLE_NAME                            NOT NULL VARCHAR2(32)
 SDO_COLUMN_NAME                           NOT NULL VARCHAR2(1024)
 SDO_DIMINFO                                        MDSYS.SDO_DIM_ARRAY
 SDO_SRID                                           NUMBER

その内容を検証するために、mdsys.SDO_GEOM_METADATA_TABLE をクエリします。重複したレコードが見つかるはずです:

SQL> select * from mdsys.SDO_GEOM_METADATA_TABLE ;

USER1                            
ROADS
LOCATION
SDO_DIM_ARRAY(SDO_DIM_ELEMENT('X', -180, 180, .5), SDO_DIM_ELEMENT('Y', -90, 90,
 .5))
8256

この問題を回避するには、mdsys.SDO_GEOM_METADATA_TABLE からそのレコードを削除します。

于 2015-06-06T22:33:22.253 に答える
0

問題は、column_name に空白文字があるためだと思います。

COR_NB_SC_LON,COR_CD_EW_    LON

私はそれを修正し、動作します。

insert into user_sdo_geom_metadata (table_name, column_name, diminfo, srid)
values (
  'COORD_REF', 
      'myuser.CONVERT_DMS_TO_GEOM(COR_NB_DG_LON,COR_NB_MN_LON,COR_NB_SC_LON,COR_    CD_EW_LON,COR_NB_DG_LAT,COR_NB_MN_LAT,COR_NB_SC_LAT,COR_CD_NS_LAT)',
  sdo_dim_array (
    sdo_dim_element('long', -180.0, 180.0, 0.5),
    sdo_dim_element('lat', -90.0, 90.0, 0.5)
  ),
 4326
);
commit;
于 2016-08-11T08:29:30.617 に答える