暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 错误: 在分区表上创建多组XML索引时,“指定的分区不存在”

askTom 2018-02-05
664

问题描述

嗨,汤姆

我们正在尝试在分区表上创建多组XML索引。

表没有子分区,因为它们还不受XML索引的支持,但是我们需要XML索引具有多个组。

这是表格:

CREATE TABLE REPLICA_OFSC.R_OFSC_DAILY_EXTRACT_XML_P
   ( COM_COMUNIDAD_ID INTEGER, 
 FECHA_FOTO_ID DATE, 
 ARCHIVO_NOMBRE VARCHAR(250), 
 ARCHIVO_TIPO VARCHAR(250), 
 CONTENIDO_XML XMLTYPE
   )
PARTITION BY RANGE (FECHA_FOTO_ID) INTERVAL (INTERVAL '1' DAY)   
(PARTITION VALUES LESS THAN ( DATE '2017-11-01'));

INSERT INTO R_OFSC_DAILY_EXTRACT_XML_P SELECT * FROM R_OFSC_DAILY_EXTRACT_XML;
COMMIT;


该表加载了从云应用程序下载的xml文件,如下所示:
COM_COMUNIDAD_ID = 国家标识
Fecha_foto _id = 日期
ARCHIVO_NOMBRE = xml文件的名称
ARCHIVO_TIPO = xml文件的类型 (清单、活动等)。
CONTENIDO_XML = 加载的xml文件的内容

我们可以成功创建XML索引:

BEGIN
DBMS_XMLINDEX.registerParameter('IX_TIME_SLOT_XML_P', 
              '        
                XMLTABLE IX_TIME_SLOT_XML_P ''time_slots/time_slot'' 
                COLUMNS
                "ID_DE_TIME_SLOT" VARCHAR(1000) PATH ''Field[@name="ID de Time Slot"]'',
                "NOMBRE_DE_TIME_SLOT" VARCHAR(1000) PATH ''Field[@name="Nombre de Time Slot"]'',
                "LABEL_DE_TIME_SLOT" VARCHAR(1000) PATH ''Field[@name="Label de Time Slot"]'',
                "ESTADO_DE_TIME_SLOT" VARCHAR(1000) PATH ''Field[@name="Estado de Time Slot"]'',
                "HORA_DE_INICIO" VARCHAR(1000) PATH ''Field[@name="Hora de Inicio"]'',
                "HORA_DE_FIN" VARCHAR(1000) PATH ''Field[@name="Hora de Fin"]''
                ');
END;


CREATE INDEX IX_DAILY_XML_P ON REPLICA_OFSC.R_OFSC_DAILY_EXTRACT_XML_P(CONTENIDO_XML) INDEXTYPE IS XDB.XMLIndex
PARAMETERS ('PARAM IX_TIME_SLOT_XML_P') LOCAL;


但是,当尝试将组添加到该索引时,我们得到错误:

BEGIN
DBMS_XMLINDEX.registerParameter('IX_ACTIVITY_WORK_SKILLS_XML_P', 
              '
                ADD_GROUP GROUP IX_ACTIVITY_WORK_SKILLS_XML_P
                XMLTABLE IX_ACTIVITY_WORK_SKILLS_XML_P ''appt_work_skills/appt_work_skill'' 
                 COLUMNS
                "ID_DE_ACTIVIDAD" VARCHAR(1000) PATH ''Field[@name="ID de Actividad"]'',
                "ID_DE_HABILIDAD_DE_TRABAJO_DE_" VARCHAR(1000) PATH ''Field[@name="ID de Habilidad de Trabajo de la Actividad"]'',
                "NIVEL_REQUERIDO_DE_HABILIDAD" VARCHAR(1000) PATH ''Field[@name="Nivel Requerido de Habilidad"]'',
                "NIVEL_PREFERIDO_DE_HABILIDAD" VARCHAR(1000) PATH ''Field[@name="Nivel Preferido de Habilidad"]''
                ');
END;

ALTER INDEX IX_DAILY_XML_P PARAMETERS('PARAM IX_ACTIVITY_WORK_SKILLS_XML_P');

Error starting at line 50 in command:
ALTER INDEX IX_DAILY_XML_P PARAMETERS('PARAM IX_ACTIVITY_WORK_SKILLS_XML_P')
Error report:
SQL Error: ORA-29874: warning in the execution of ODCIINDEXALTER routine
ORA-29960: line 1, ORA-02149: Specified partition does not exist
29874. 00000 -  "warning in the execution of ODCIINDEXALTER routine"
*Cause:    A waring was returned from the ODCIIndexAlter routine.
*Action:   Check to see if the routine has been coded correctly
           Check the user defined warning log tables for greater details.


专家解答

注册组IX_ACTIVITY_WORK_SKILLS_XML_P的语法是错误的。你不ADD_GROUP,只需说明它是什么:

CREATE TABLE R_OFSC_DAILY_EXTRACT_XML_P
   ( COM_COMUNIDAD_ID INTEGER, 
 FECHA_FOTO_ID DATE, 
 ARCHIVO_NOMBRE VARCHAR(250), 
 ARCHIVO_TIPO VARCHAR(250), 
 CONTENIDO_XML XMLTYPE
   )
PARTITION BY RANGE (FECHA_FOTO_ID) INTERVAL (INTERVAL '1' DAY)   
(PARTITION VALUES LESS THAN ( DATE '2017-11-01'));


BEGIN
DBMS_XMLINDEX.registerParameter('IX_TIME_SLOT_XML_P', 
              ' XMLTABLE IX_TIME_SLOT_XML_P ''time_slots/time_slot'' 
                COLUMNS
                "ID_DE_TIME_SLOT" VARCHAR(1000) PATH ''Field[@name="ID de Time Slot"]'',
                "NOMBRE_DE_TIME_SLOT" VARCHAR(1000) PATH ''Field[@name="Nombre de Time Slot"]'',
                "LABEL_DE_TIME_SLOT" VARCHAR(1000) PATH ''Field[@name="Label de Time Slot"]'',
                "ESTADO_DE_TIME_SLOT" VARCHAR(1000) PATH ''Field[@name="Estado de Time Slot"]'',
                "HORA_DE_INICIO" VARCHAR(1000) PATH ''Field[@name="Hora de Inicio"]'',
                "HORA_DE_FIN" VARCHAR(1000) PATH ''Field[@name="Hora de Fin"]''
                ');
END;
/

CREATE INDEX IX_DAILY_XML_P ON R_OFSC_DAILY_EXTRACT_XML_P(CONTENIDO_XML) 
INDEXTYPE IS XDB.XMLIndex PARAMETERS ('PARAM IX_TIME_SLOT_XML_P') LOCAL;

BEGIN
DBMS_XMLINDEX.registerParameter('IX_ACTIVITY_WORK_SKILLS_XML_P', 
' GROUP IX_ACTIVITY_WORK_SKILLS_XML_P
  XMLTABLE IX_ACTIVITY_WORK_SKILLS_XML_P ''appt_work_skills/appt_work_skill'' 
   COLUMNS
  "ID_DE_ACTIVIDAD" VARCHAR(1000) PATH ''Field[@name="ID de Actividad"]'',
  "ID_DE_HABILIDAD_DE_TRABAJO_DE_" VARCHAR(1000) PATH ''Field[@name="ID de Habilidad de Trabajo de la Actividad"]'',
  "NIVEL_REQUERIDO_DE_HABILIDAD" VARCHAR(1000) PATH ''Field[@name="Nivel Requerido de Habilidad"]'',
  "NIVEL_PREFERIDO_DE_HABILIDAD" VARCHAR(1000) PATH ''Field[@name="Nivel Preferido de Habilidad"]''
  ');
END;
/

ALTER INDEX IX_DAILY_XML_P PARAMETERS('PARAM IX_ACTIVITY_WORK_SKILLS_XML_P');

Index IX_DAILY_XML_P altered.

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论