源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

关于sql脚本导入Oracle时重复生成check约束的问题解决

  • 时间:2022-08-03 13:15 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:关于sql脚本导入Oracle时重复生成check约束的问题解决
[b]前言[/b] 最近在工作中一位细心的同事发现产品的全量sql脚本中有一些重复的check约束检查,就像下图这样的 [img]http://files.jb51.net/file_images/article/201705/2017518102143315.jpg?2017418102152[/img] 重复脚本 怪异之处还在于,每次执行一遍该脚本,然后导出脚本,在导出脚本中重复的次数就会增加一遍。通过navicat,最终确认每导入一次就会新增加一条重复的check约束,如下图所示 [img]http://files.jb51.net/file_images/article/201705/2017518102219247.jpg?2017418102228[/img] navicat 这个全量脚本是直接从数据库中导出的,为了方便导入其他的Oracle数据库中,从产品的出货库导出时手动去掉了服务名、双引号。 [b]通过如下步骤可复现该问题:[/b] [b]1.创建表[/b]
CREATE TABLE PD_WEB_FILEUPLOAD_CHUNK (
ID VARCHAR2(32 BYTE) NOT NULL ,
MD5 VARCHAR2(32 BYTE) DEFAULT NULL NULL ,
CHUNK NUMBER DEFAULT NULL NULL ,
FILE_DIR VARCHAR2(200 BYTE) NOT NULL
)
可以看到上面的脚本中有NOT NULL的标识,执行完后在navicat中可以看到结果是这样的 [img]http://files.jb51.net/file_images/article/201705/2017518102311465.jpg?2017418102320[/img] navicat 注意看,这里的check约束是带双引号的。 [b]2.执行增加check约束的脚本[/b]
ALTER TABLE PD_WEB_FILEUPLOAD_CHUNK ADD CHECK (ID IS NOT NULL);
ALTER TABLE PD_WEB_FILEUPLOAD_CHUNK ADD CHECK (FILE_DIR IS NOT NULL);
执行了两遍后,结果如图所示 [img]http://files.jb51.net/file_images/article/201705/2017518102413934.jpg?2017418102422[/img] navicat 测试到这里,以为最终终于找到了原因,确认为双引号的问题。抱着严谨的态度,再次确认了一下 [b]3.执行带双引号的check约束的脚本[/b]
ALTER TABLE PD_WEB_FILEUPLOAD_CHUNK ADD CHECK ("ID" IS NOT NULL);
ALTER TABLE PD_WEB_FILEUPLOAD_CHUNK ADD CHECK ("FILE_DIR" IS NOT NULL);
结果如图所示: [img]http://files.jb51.net/file_images/article/201705/2017518102452239.jpg?201741810250[/img] navicat 靠!居然还是会重复生成! [b]解决方法[/b] 验证到这里,算是找出了原因。 在全量导出的脚本中,创建表的脚本中已经隐含了检查约束,如果再显示的添加检查约束就会重复生成。所以,解决办法为需要手动删除所有显示的检查约束。 [b]总结[/b] 以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对编程素材网的支持。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部