martes, 17 de septiembre de 2013

ORA-14039

Probé este ejemplo en Oracle 11.2.0.2.7. Se puede crear una tabla con particiones de la manera siguiente:

SQL> create table andrews_table
  2  partition by range (owner)
  3  (partition p1 values less than ('M'),
  4   partition p2 values less than (maxvalue))
  5  as select * from dba_tables
  6  where owner = 'SYS'
  7  /
 
Tabla creada.
 
SQL>

Se puede crear un índice local en esta tabla así:
 
SQL> create index andrews_index
  2  on andrews_table (table_name)
  3  local
  4  /
 
Indice creado.
 
SQL> drop index andrews_index
  2  /
 
Indice borrado.
 
SQL>

Pero si quieres crear un índice único, éste no puede ser local y Oracle te da un error que no ayuda mucho:

SQL> create unique index andrews_index
  2  on andrews_table (table_name)
  3  local
  4  /
on andrews_table (table_name)
   *
ERROR en linea 2:
ORA-14039: las columnas de particion deben formar un
subjuego de columnas clave de un indice UNIQUE
 
SQL>
 
La respuesta es sencilla, el índice único tiene que ser global:
 
SQL> create unique index andrews_index
  2  on andrews_table (table_name)
  3  global
  4  /
 
Indice creado.
 
SQL>

No hay comentarios:

Publicar un comentario