Oracle修改check约束的sql语句

本文介绍了在Oracle中如何修改check约束,强调了修改过程中必须删除原有约束的重要性。通过desc命令查看表结构,然后查询约束信息,展示正确修改check约束的SQL语句,并详细解释了在添加新约束后为何需要删除旧约束,以及删除约束和重新插入数据的流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

开始想修改这张表的其中一个字段的约束 check约束,百度各种说不能修改check约束??只能删掉了约束,再重新修改约束。经过各种测试得出,oracle是可以修改check约束,但是也是必须需要删掉原来的约束(我天真的以为,修改会自动删掉,是不会的!),才能插入数据成功!!!!上代码。

(1)首先使用desc 表名字查看表结构。

desc 表名字;

也就是修改该表名字中的stat_cde,原本类型是 not null varcher2(1) ,累似于性别的标记。需要填写指定的字符。

(2)再看表约束,sql如下:

--查询约束关系
select * from user_constraints where table_name='ES_SUNING_AUTO_TASK';

查询结果如下,查询出来 stat_cde 是SPAE字符。现在需要修改成SPAEI。

 

(3)正确的修改 check的语句:(stat_cde是字段名字)

--更改约束关系
alter table 表名字 modify STAT_CDE VARCHAR2(1)  check(STAT_CDE in('S', 'P', 'A', 'E','I'));

修改执行结果:

(4)再次查询结果,是多了一条约束记录,之前的约束是还在的。

当你再次选择插入的时候,还是会报错。因为原来既有SPAE约束,也有你新加入的SPAEI 判断约束,两条都执行。因此会报错。

执行插入语句,会报错:

insert into 表名字 (ID,ORDER_CODE,ORDER_KEY,STAT_CDE,MSG,creat_dte) values (SQ_ES_SUNING_AUTO_TASK_ID.nextval,'123',null,'I',null,sysdate);

报错结果

在行: 514 上开始执行命令时出错 -
insert into 你的表名字 (ID,ORDER_CODE,ORDER_KEY,STAT_CDE,MSG,creat_dte) values (SQ_ES_SUNING_AUTO_TASK_ID.nextval,'123',null,'I',null,sysdate)
错误报告 -
ORA-02290: check constraint (SYS_ES.SYS_C00114563) violated

 

(5)因此,是还需要删除你原来的约束的!并且先查找除你的contanatnt_name,后删除提交。

你的contraint name,不需要加单引号,直接复制。

--先查询一次你的contraint name
select * from user_constraints where table_name='大写表名字';

--删除约束 , SYS_C00114563 是你的contraint name,并且,不需要加单引号,直接复制
alter table 表名字   drop constraint SYS_C00114563;

(6)删除约束成功后,重新插入,即可插入成功。修改check约束完毕

最后成功解决

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值