一个表表结构指定了某个字段(如cno)not null,同时加了check not null约束。
现在需要将not null约束去掉,要让cno字段可以插入空值。
于是执行了下面的语句:
1.alter table tableName drop constraints not_null_cons_cno; 2.alter table tableName modify cno null;
语句执行完毕,还是不能插入空值。
报如下错误:
ORA-01451: column to be modified to NULL cannot be modified to NULL
查询了Oracle的文档,描述如下:
Cause: the column may already allow NULL values, the NOT NULL constraint is part of a primary key or check constraint.
Action: if a primary key or check constraint is enforcing the NOT NULL constraint, then drop that constraint.
然后我发现这个字段与其他的字段组成了一个唯一性的组合索引。
于是,我修改这个索引,从中删掉cno字段。
1.删除主键;
alter table tableName drop constraints pk_tableName;
2.删除唯一索引;
drop index un_idx_table_name;
3.创建主键(不包括cno字段);
alter table tableName add constraint PK_tableName primary key (DNO, TNO, YEAR, PNO);
4.创建唯一索引(不包括cno字段)。
create unique index ix_tableName on tableName (DNO, TNO, YEAR, PNO);
第3步报错了:
ORA-02437: cannot validate (TBOSDATA.PK_VOU_NUM) - primary key violated
这个错误是说主键或唯一键有重复记录。(我的唯一性约束作用在dno,tno,cno,year,pno几个字段。
查找重复的记录:
select * from test vnt where (vnt.dno, vnt.tno, vnt.year, vnt.pno) in (select t.dno, t.tno, t.year, t.pno from test t group by t.dno, t.tno, t.year, t.pno having count(*) > 1) order by dno, tno, year, pno;
删除重复记录或修改重复记录,然后重新执行上面的3,4就OK了。
相关推荐
获取oracle 表字段,表名,以及主键之类等等的信息,获取oracle 表字段,表名,以及主键之类等等的信息获取oracle 表字段,表名,以及主键之类等等的信息获取oracle
oracle表字段或是视图字段添加备注方法
获取ORACLE 表字段,表名,以及主键之类等等的信息 基本开发中要用的信息都能取到了.
mysql与oracle 表字段定义比较,了解两个数据库区别
oracle变更数据表字段类型 ,简单易懂方便快捷!
oracle截取表字段中带分号的信息的存储过程
Oracle存储过程优化思路以及思路下优化效果比较
描述一些用数据字典内容查询表结构的内容,使用简单的SQL可以方便的查询所要的内容
添加字段的语法:alter table tablename add (column datatype [default value][null/not null],….); 修改字段的语法:alter ...使用alter table 来增加、删除和修改一个列的例子。 创建表结构:create table test1(id
Oracle数据库中,表中已存在数据字段修改该字段的长度,如有疑问可沟通联系,当积分自动提升到很高的时候欢迎联系,会把积分调低。
根据数据库表字段自动生成javaBean工具(支持Mysql,Oracle) , 能够智能开启驼峰标识 ,操作非常简单, 包含使用教程
Oracle 约束错误约束错误Oracle 约束错误约束错误
非空约束 唯一性约束 主键约束 外键约束 检查约束
将此脚本复制,输入表名执行可直接获得所有本表字段。
获取表字段: select * from user_tab_columns where Table_Name='\u7528\u6237\u8868' order by column_name 获取表注释: select * from user_tab_comments where Table_Name='\u7528\u6237\u8868' order by ...
可将oracle中表名 表注释 字段类型 字段长度 字段注释 导出为excel,生成的数据库表index sheet页面 可进行表sheet之间的跳转
记录一次在Vmware ESXi6虚拟机环境下搭建oracle的RAC的过程
Oracle定义约束 外键约束 实验详解