有时我们在【创建数据表】时、【创建物化视图】时、亦或者在【给数据表创建索引】时,提示这个错误:
ORA-01450:超出最大的关键字长度(6398)

这个错误网络上中文解释很少,后在国外网站找,找到了问题原因。其实它的提示意思就是”单个表中,建立索引的字段长度总和不能超过6398字节“。然后我看了一下我的表,我是在做物化视图时遇到的这个错误,我检查了一下有两个varchar2(4000)的字段在我写的语句内,那就相当于8000字节长度大于oracle规定的6398,这个错就是这么出现的。

解决方法也很简单,如果是新建索引的话那就尽量控制字段的长度;如果是物化视图时提示,并且原表不想修改字段类型且确实没有某条数据占用那么多长度的话,可以在select语句中使用Translate(colname USING NCHAR_CS) 的形式,转换查询出来的数据为nchar类型即可成功创建。

create materialized view mv_report_emplfee 
refresh force on demand start with sysdate next
to_date(concat(to_char( sysdate+1,'dd-mm-yyyy'),'09:00:00'),'dd-mm-yyyy hh24:mi:ss') 
as
select Translate(detail.emp_name USING NCHAR_CS) emp_name,
       Translate(detail.emp_no USING NCHAR_CS) emp_no,
       sum(detail.bill_total) bill_total
  from tb_pay_detail detail
 group by detail.emp_name, detail.emp_no