oracle的plsql,checks是什么?干什么用的?

本文介绍了一次使用PLSQL将表从一个数据库导出并导入到另一个数据库时遇到的报错问题及其解决过程。错误源于源表中的检查约束(checks)名称不规范,涉及特殊字符。文中详细描述了如何通过重命名约束、直接删除约束以及导出为SQL脚本进行修改等方法解决问题。
摘要由CSDN通过智能技术生成

通过plsql将库A中的表X导出pde,然后倒入到另一个库B中,报错如下:



然后去看A库中的X表,发现有个checks里有东西。

我看着像是一个约束,用来保证ID不能为空。这个设置和keys即主键不是一个道理吗?然后我去看,果然没有给这个表设置主键。。


原来设计者是想通过checks来约束id不能为空,来替代Keys这种方式。至于为什么不用key,而是用checks,我就不清楚了。感觉得不偿失,很不明智,也很没有必要,一般没有这么干的。

---

那么oracle的plsql,checks是什么?干什么用的?是不是我猜想的那样呢?

答案是:是的。

http://www.linuxidc.com/Linux/2014-11/109303.htm



亲测一下,还是按照上文的那个约束,id不能为空的约束:

首先插入一条id不为空的正常数据,正常写入一条记录到数据库。


然后插入一条id为空的数据,报错如下。



===回到该表通过plsql再次导入报错的问题,为什么?


我猜测可能是因为命名的checks的名字很诡异(其中可以看出有特殊字符和等号,如$==),不符合要求所以导入不成功。

所以我要将这个名字进行重命名。但是我发现直接通过plsql在界面上重命名,会报错,那么我只能先删除当前的,然后新增一个。


但是发现删也不能在界面上操作:


那我只能通过sql代码删除了试试了:

删除语句:


操作一把:


但是也还是不行。

我只能用终极策略了,将表X导出成sql脚本,然后:

①将sql的代码中,找到建表语句的创建checks的部分代码,然后将名称改为规范的。

②将该表删掉X。

③执行修改后的sql脚本(其中sql中也是有历史数据的,执行sql脚本一并导过来了)。

测试:



上面是建表语句,下面是历史数据。

然后导入修改后的脚本,成功。




然后再将表从库A导出成pde,然后倒入到库B,成功,没有任何报错,是done。




那我就纳闷了,这个不规范的名字,他是怎么成功写入到数据库中的?

不得而知,但是我偶然的机会发现,将之前删掉的表,之前的checks的名称就变了。。。就变成那种特殊的字符组成的东西,如果通过plsql的界面进行恢复,那checks的名称就当然变成那种特殊的字符组成的东西,我猜很有可能就是这个原因导致的。



然后如果恢复回去





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值