Sql 如何在具有不同数据类型的组合键上添加集群?

Sql 如何在具有不同数据类型的组合键上添加集群?,sql,oracle,indexing,sqlplus,composite-key,Sql,Oracle,Indexing,Sqlplus,Composite Key,我有几个表,我想集群然而,我已经归结到这个表的问题。以下是我创建集群的方式: create cluster xyz_clus (xyz_key int, date1 date, time timestamp ); 我是这样添加索引的: create index xyz_clus_idx on cluster xyz_clus; 这是我做的桌子: create table ABC ( PRIMARY KEY (date1, time, number1), date1

我有几个表,我想集群然而,我已经归结到这个表的问题。以下是我创建集群的方式:

create cluster xyz_clus
(xyz_key int,
date1 date,
time timestamp
);
我是这样添加索引的:

create index  xyz_clus_idx on cluster xyz_clus;
这是我做的桌子:

 create table ABC
    (
    PRIMARY KEY (date1, time, number1),
    date1 date,  
    time timestamp(0), 
    number1 int not null,
    classnumber varchar(7) not null, 
    constraint timeslot_classnumber_fk Foreign Key (classnumber) references class (classnumber)
    )
      cluster xyz_clus(date1, time, number1);
然而,无论我怎么努力,我总是不断地收到这个错误

ORA-01753: column definition incompatible with clustered column definition
正如我在你的文章中解释的,datatypea需要精确匹配。以下代码起作用:

CREATE TABLE abc (
  date1       DATE,  
  time        TIMESTAMP, 
  number1     INT NOT NULL,
  classnumber VARCHAR2(7) NOT NULL, 
  PRIMARY KEY (date1, time, number1),  
  CONSTRAINT timeslot_classnumber_fk FOREIGN KEY (classnumber) 
             REFERENCES CLASS (classnumber)
) CLUSTER xyz_clus(number1, date1, time);
Table ABC created
但是,这会导致错误,因为它在表中使用
时间戳(0)
,在集群中使用
时间戳

CREATE TABLE abc (
  date1       DATE,  
  time        TIMESTAMP(0), 
  number1     INT NOT NULL,
  classnumber VARCHAR2(7) NOT NULL, 
  PRIMARY KEY (date1, time, number1),  
  CONSTRAINT timeslot_classnumber_fk FOREIGN KEY (classnumber) 
             REFERENCES CLASS (classnumber)
) CLUSTER xyz_clus(number1, date1, time);
ORA-01753: column definition incompatible with clustered column definition
同样,组合键中列的顺序也很重要。以下查询具有正确的
时间戳
,但表中列的顺序为
日期、时间戳、INT
,在集群中为
INT、日期、时间戳

CREATE TABLE abc (
  date1       DATE,  
  time        TIMESTAMP, 
  number1     INT NOT NULL,
  classnumber VARCHAR2(7) NOT NULL, 
  PRIMARY KEY (date1, time, number1),  
  CONSTRAINT timeslot_classnumber_fk FOREIGN KEY (classnumber) 
             REFERENCES CLASS (classnumber)
) CLUSTER xyz_clus(date1, time, number1);
ORA-01753: column definition incompatible with clustered column definition