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

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


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

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

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

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

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

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

---

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

答案是:是的。

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

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


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

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

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

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

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


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

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

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

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

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

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

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

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

删除语句:

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

操作一把:

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

但是也还是不行。

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

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

②将该表删掉X。

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

测试:

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


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

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

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

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


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

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


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

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

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

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

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

然后如果恢复回去

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