ORA-01450: 超过键值长度 处理一例

这里的发生的例外情况为在为一个栏位创建索引时,出现上述异常,索引如下:

CREATE INDEX PPEMS.IDX_SYS_STD_LANG_RES_TEXT ON PPEMS.SYS_STD_LANGUAGE_RESOURCE
(TEXT)
TABLESPACE LOG_IDX

PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          1M
            NEXT             5M
            MINEXTENTS       1
            MAXEXTENTS       2147483645
            PCTINCREASE      0
            FREELISTS        1
            FREELIST GROUPS  1
            BUFFER_POOL      DEFAULT
           )
NOPARALLEL;

开始以为是索引的名称太长,后来怎么修改都无济如是。

经下列研究发现:

SQL>   create   table   test3(a   varchar2(4000),   b   varchar2(4000));  
   
  表已创建。  
   
  SQL>   create   index   ix_test3_ab   on   test3(a,b);  
  create   index   ix_test3_ab   on   test3(a,b)  
                                                          *  
  ERROR   位于第   1   行:  
  ORA-01450:   超出最大的关键字长度   (6398)  
   
  SQL>   DROP   TABLE   TEST3   CASCADE   CONSTRAINTS  
   
  表已丢弃。  
   
  SQL>   create   table   test3(a   varchar2(400),   b   varchar2(400));  
   
  表已创建。  
   
  SQL>   create   index   ix_test3_ab   on   test3(a,b);  
   
  索引已创建。  
   
  看出来了吧?你的两个字段建立的复合索引,单个索引项最大可能是4000+4000共计8000个字节,有可能超过6398这个限制,因此索引无法创建。  
   
  如果你没有那么多内容要存储的话,就把字段定义小点。   
 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/14245958/viewspace-331012/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/14245958/viewspace-331012/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值