11g不能在创建具有重复列的函数索引了
2012-03-16 13:29
183 查看
把一个测试系统的数据从10g迁移到11g中后,听开发人员说他们有个创建索引的SQL语句执行失败,但是在10g里面是能够正常执行。这个索引是一个具有重复列的函数索引,可能是手误并且这个索引没怎么用,所以就一直没注意这个索引。自己感觉挺有意思的,于是就自己试验了一下:
1、先来看11g的情况:
[oracle@instsvr1 ~]$ sql
SQL*Plus: Release 11.2.0.2.0 Production on Fri Mar 16 11:29:33 2012
Copyright (c) 1982, 2010, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production
With the Partitioning, Automatic Storage Management, OLAP, Data Mining
and Real Application Testing options
srcbdb@SYS> conn vip
Enter password:
Connected.
非函数索引如果具有重复的列是不允许创建的:
srcbdb@VIP> create index lzb on T_SYS_PARAM (param_id,PARAM_ID);
create index lzb on T_SYS_PARAM (param_id,PARAM_ID)
*
ERROR at line 1:
ORA-00957: duplicate column name
在11g里面即使是函数索引,但是具有重复的列也是不允许创建的:
srcbdb@VIP> create index lzb on t_sys_param(nvl(PARAM_NAME,'*'),nvl(PARAM_NAME,'*'));
create index lzb on t_sys_param(nvl(PARAM_NAME,'*'),nvl(PARAM_NAME,'*'))
*
ERROR at line 1:
ORA-54015: Duplicate column expression was specified
2、再来看10g的情况
[oracle@dctest1 ~]$ sql
SQL*Plus: Release 10.2.0.4.0 - Production on Mon Mar 19 19:32:20 2012
Copyright (c) 1982, 2007, Oracle. All Rights Reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
dgut@SYS> conn vip
Enter password:
Connected.
在10g里面非函数索引如果具有重复的列也是不允许创建的:
dgut@VIP> create index lzb on T_SYS_PARAM (param_id,PARAM_ID);
create index lzb on T_SYS_PARAM (param_id,PARAM_ID)
*
ERROR at line 1:
ORA-00957: duplicate column name
最后来看神奇的一幕,在10g里面如果是函数索引,即使是具有重复的列,索引依然能创建成功:
dgut@VIP> create index lzb on t_sys_param(nvl(PARAM_NAME,'*'),nvl(PARAM_NAME,'*'));
Index created.
总结:虽然创建具有重复列的函数索引没什么意义,甚至更差,但是这个11g和10g的使用差别挺有意思的就记录了下来,只能所11g更严谨了,呵呵!
1、先来看11g的情况:
[oracle@instsvr1 ~]$ sql
SQL*Plus: Release 11.2.0.2.0 Production on Fri Mar 16 11:29:33 2012
Copyright (c) 1982, 2010, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production
With the Partitioning, Automatic Storage Management, OLAP, Data Mining
and Real Application Testing options
srcbdb@SYS> conn vip
Enter password:
Connected.
非函数索引如果具有重复的列是不允许创建的:
srcbdb@VIP> create index lzb on T_SYS_PARAM (param_id,PARAM_ID);
create index lzb on T_SYS_PARAM (param_id,PARAM_ID)
*
ERROR at line 1:
ORA-00957: duplicate column name
在11g里面即使是函数索引,但是具有重复的列也是不允许创建的:
srcbdb@VIP> create index lzb on t_sys_param(nvl(PARAM_NAME,'*'),nvl(PARAM_NAME,'*'));
create index lzb on t_sys_param(nvl(PARAM_NAME,'*'),nvl(PARAM_NAME,'*'))
*
ERROR at line 1:
ORA-54015: Duplicate column expression was specified
2、再来看10g的情况
[oracle@dctest1 ~]$ sql
SQL*Plus: Release 10.2.0.4.0 - Production on Mon Mar 19 19:32:20 2012
Copyright (c) 1982, 2007, Oracle. All Rights Reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
dgut@SYS> conn vip
Enter password:
Connected.
在10g里面非函数索引如果具有重复的列也是不允许创建的:
dgut@VIP> create index lzb on T_SYS_PARAM (param_id,PARAM_ID);
create index lzb on T_SYS_PARAM (param_id,PARAM_ID)
*
ERROR at line 1:
ORA-00957: duplicate column name
最后来看神奇的一幕,在10g里面如果是函数索引,即使是具有重复的列,索引依然能创建成功:
dgut@VIP> create index lzb on t_sys_param(nvl(PARAM_NAME,'*'),nvl(PARAM_NAME,'*'));
Index created.
总结:虽然创建具有重复列的函数索引没什么意义,甚至更差,但是这个11g和10g的使用差别挺有意思的就记录了下来,只能所11g更严谨了,呵呵!
相关文章推荐
- 不能在具有唯一索引 'RoleNameIndex' 的对象 'dbo.AspNetRoles' 中插入重复键的行
- 不能在具有唯一索引 '' 的对象 '' 中插入重复键的行
- 如何解决Oracle“不能创建唯一索引,发现重复记录”问题
- 如何解决Oracle“不能创建唯一索引,发现重复记录”问题
- instr 不能用变量在 参数里,来创建函数索引 利用返回值[待总结]
- 不能在具有唯一索引“IX_******”的对象“dbo.****”中插入重复键的行。重复键值为 (110, 372000, 2)。
- [Err] 23000 - [SQL Server]不能在具有唯一索引 'IX_student_info_2' 的对象 'dbo.student_info' 中插入重复键的行
- informix对某表上某个字段不能创建唯一性索引也不能删除索引 错误State:S0011
- Oracle 11g Release 1 (11.1) Oracle Text——演示创建 Oracle Text 索引
- Python字符串类型(创建、索引、切片、成员操作符、重复、连接、计算长度、内置方法)
- 【ASP.NET】如何使用类创建公共函数,在不同ASP.NET页面间重复调用
- Oracle创建唯一索引遇到的问题(ORA-01452: 无法 CREATE UNIQUE INDEX; 找到重复的关键字)
- mysql创建索引时出现duplicate "XX"的原因以及查询重复记录
- 解决mysql不能创建函数
- 数据库中表,函数,存储过程,触发器不重复创建格式
- * 需求:ArrayList去除集合中字符串的重复值(字符串的内容相同) * 要求:不能创建新的集合,就在以前的集合上做。
- 自定义函数名称不能与系统函数名称重复
- 对自定义函数建立索引时抛异常--ORA-30553: 函数不能确定(ORA-30553: The function is not deterministic)解决方法
- mongo集合以_id作为分片键的,不能在其他列上创建唯一索引
- mysql中不能创建函数的处理方法