`

记录一次删除Oracle表字段的非空约束

阅读更多

一个表表结构指定了某个字段(如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表字段或是视图字段添加备注方法

    Oracle 是一个强大的关系数据库管理系统,提供了多种方式来添加备注信息到表字段或视图字段中。在本节中,我们将详细介绍如何使用 Oracle 的 Comment 机制来添加备注信息到表字段或视图字段中。 添加备注信息到表字...

    oracle变更数据表字段类型

    在Oracle数据库中更改数据表字段类型虽然不是一项简单的任务,但通过合理的步骤安排和谨慎的操作,完全可以避免潜在的风险,并顺利完成变更。希望本文提供的方法能够帮助你在实际工作中解决类似问题。

    mysql与oracle 表字段定义比较

    mysql与oracle 表字段定义比较,了解两个数据库区别

    oracle截取表字段中带分号的信息的存储过程

    Oracle 存储过程截取表字段中带分号的信息 Oracle 存储过程是 Oracle 数据库中的一种程序单元,它可以实现复杂的业务逻辑和数据处理。在本文中,我们将讨论如何使用 Oracle 存储过程来截取表字段中带分号的信息。 ...

    Oracle表字段更新存储过程效率优化思路

    本文将深入探讨Oracle表字段更新的存储过程效率优化思路,以及优化后可能带来的性能提升。 首先,理解存储过程的执行原理是优化的基础。存储过程在创建时会被编译成优化器可以理解的执行计划。这个计划会保存在...

    获取ORACLE 表字段,表名,以及主键之类等等的信息

    ### 获取Oracle表字段、表名及主键等信息 在Oracle数据库管理中,查询表的结构信息是一项基本而重要的任务。这些信息包括表名、字段名、数据类型、字段长度、是否可为空以及主键等。掌握如何有效地获取这些信息对于...

    oracle删除表字段和oracle表增加字段

    添加字段的语法:alter table tablename add (column datatype [default value][null/not null],….); 修改字段的语法:alter ...使用alter table 来增加、删除和修改一个列的例子。 创建表结构:create table test1(id

    Oracle 数据表修改字段长度

    Oracle数据库中,表中已存在数据字段修改该字段的长度,如有疑问可沟通联系,当积分自动提升到很高的时候欢迎联系,会把积分调低。

    Oracle 约束错误约束错误

    例如,在创建了一个父表和子表之间的外键约束关系后,试图删除父表中的记录,但子表中存在对应的记录,将会出现 ORA-02292 错误。在这种情况下,可以先删除子表中的记录,然后再删除父表中的记录。也可以使用 ALTER ...

    oracle中如何创建约束?

    这意味着如果`job`表中的一个记录被删除,那么所有引用该`jid`的`emp`表中的记录也将被删除。 ### 创建表与约束示例 以下是创建包含外键约束的表的示例代码: ```sql CREATE TABLE job ( jid INT PRIMARY KEY, ...

    根据数据库表字段自动生成javaBean工具(支持Mysql,Oracle)

    为了提高开发效率,各种自动化工具应运而生,其中“根据数据库表字段自动生成JavaBean工具”便是其中之一。这个工具能够帮助开发者快速地从数据库表结构生成对应的JavaBean类,极大地减少了手动编写代码的工作量,...

    查看登录oracle数据库用户记录.docx

    要查看登录 Oracle 数据库的用户记录,可以创建一个临时日志表,并建立一个数据库表触发器来记录用户的登录行为。 创建临时日志表 首先,需要创建一个临时日志表来存储用户的登录记录。可以使用以下 SQL 语句来...

    oracle基本约束语法

    在Oracle数据库中,约束是用于确保数据完整性的规则或规定,它们定义了表中的数据必须遵循的特定条件。约束可以在创建表时定义,也可以在表已经存在后通过修改表结构来添加。以下是对Oracle数据库中四种主要约束类型...

    MFC使用ADO实现与Oracle数据库的操作

    MFC通过ADO实现了对Oracle数据库的增删改查,主要实现了数据的增加、删除、修改、查找功能。该资源本原本是日文的,我通过个人的学习和翻译,把相关重要代码的注释以及界面都翻译成了中文。并且在此基础上添加了不少...

    Oracle用户数据字典以及查询表字段

    Oracle用户数据字典以及查询表字段

    Oracle所有约束基本语法

    Oracle数据库系统是世界上最广泛使用的数据库管理系统之一,它提供了丰富的数据完整性约束来确保数据的准确性和一致性。在Oracle中,约束是定义在表上的规则,用于限制可以存储在表中的数据类型和值。以下是对Oracle...

    Oracle 查询表信息获取表字段及字段注释

    在Oracle数据库管理中,了解如何查询表信息,包括获取表字段、字段注释以及表的元数据,是数据库管理员和开发人员日常工作中不可或缺的一部分。以下将详细解释这些查询语句的工作原理及其背后的数据库结构。 首先,...

Global site tag (gtag.js) - Google Analytics