Oracle索引最大密钥长度超出

时间:2017-10-30 16:02:26

标签: oracle indexing oracle11g

我收到错误 ORA-01450:超出最大密钥长度(6398),因为我尝试创建索引

CREATE INDEX FORENAME_SURNAME ON CARD_HOLDER( REGEXP_REPLACE (UPPER( FORENAME ),'\\s|-|_|\\.|\\:|\\,',''), REGEXP_REPLACE (UPPER( SURNAME ),'\\s|-|_|\\.|\\:|\\,','') );

错误代码是公平的,但我的列每个都是100Bytes,所以索引如何超过最大值?

db_block_size = 8192而非6398。

列定义

  CREATE TABLE CARD_HOLDER
(   "CARD_HOLDER_ID" NUMBER NOT NULL ENABLE, 
"TITLE" VARCHAR2(10 BYTE), 
"FORENAME" VARCHAR2(100 BYTE), 
"SURNAME" VARCHAR2(100 BYTE) NOT NULL ENABLE, 
)

1 个答案:

答案 0 :(得分:0)

您可以尝试使用连接而不是两个不同的列。但是,这只是一种解决方法,除非您在串联时使用查询,否则可能没用。

CREATE INDEX forename_surname ON
    card_holder ( regexp_replace(upper(forename),'\\s|-|_|\\.|\\:|\\,','')
    || regexp_replace(upper(surname),'\\s|-|_|\\.|\\:|\\,','') );