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

原创 2016年12月15日 12:47:50

之前一位细心的同事发现产品的全量sql脚本中有一些重复的check约束检查,就像下图这样的

重复脚本

重复脚本

怪异之处还在于,每次执行一遍该脚本,然后导出脚本,在导出脚本中重复的次数就会增加一遍。通过navicat,最终确认每导入一次就会新增加一条重复的check约束,如下图所示

navicat

navicat

  这个全量脚本是直接从数据库中导出的,为了方便导入其他的Oracle数据库中,从产品的出货库导出时手动去掉了服务名双引号

  通过如下步骤可复现该问题:
1.创建表

1
2
3
4
5
6
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中可以看到结果是这样的

navicat

navicat

注意看,这里的check约束是带双引号的。

2.执行增加check约束的脚本

1
2
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);

执行了两遍后,结果如图所示

navicat

navicat

测试到这里,以为最终终于找到了原因,确认为双引号的问题。抱着严谨的态度,再次确认了一下

3.执行带双引号的check约束的脚本

1
2
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);

结果如图所示:
navicat

navicat

靠!居然还是会重复生成!

  验证要这里,算是找出了原因。在全量导出的脚本中,创建表的脚本中已经隐含了检查约束,如果再显示的添加检查约束就会重复生成。所以,解决办法为需要手动删除所有显示的检查约束。

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

powerdesign,如何解决PDM生成sql脚本的过程中,无法生成外键约束

最近工作中需要使用powerdesign数据库建模,建模完成后发现生的sql脚本没有正常生成主外键约束。(这里我只粘贴了PDM视图) 双击约束,预览,报错: -- The preview ...

SQL Server 2008 转换为 SQL 2005 数据库 脚本生成方式(解决主键、索引、标识等数据库约束丢失)

要转换的数据库上右击,出现的快捷菜单中点击“任务 > 生成脚本”,在“脚本向导”中点击“下一步”,选中你要转换的数据库(如果前边已经选中,这次就是选中状态),勾选下部的“为所选数据库的所有对象编写脚本...

列的范围控制 CHECK 约束 和 规则 (sql2005)

一、约束          约束定义关于列中允许值的规则,是强制完整性的标准机制。        使用约束优先于使用触发器、规则和默认值。查询优化器也使用约束定义生成高性能的查询执行计划。...

码农小汪-SQL 图形界面设计约束,unqiue,check Default Foreign

怎么说呢,这个东西并不是经常的使用,慢慢的记不住怎么玩得啦,网上找的资料,复习复习哈!SQLServer中有五种约束,Primary Key约束、Foreign Key约束、Unique约束、Defa...

PowerDesigner的逆向工程,将ORACLE,SQL SERVER的脚本导入到PowerDesigner中生成模型

PowerDesigner的逆向工程,将ORACLE,SQL SERVER的脚本导入到PowerDesigner中生成模型 Oracle的反向工程就是指将Oracle中的数据库,当然...

oracle的完整性约束:check/not null/unique/primary/foreign key

oracle的完整性约束   完整性约束用于增强数据的完整性,Oracle提供了5种完整性约束:     Check     NOT NULL     Unique     Primar...

Oracle check 约束

看下面的例子: CREATE TABLE temp (age NUMBER(3)); ALTER TABLE temp ADD CONSTRAINT ck_temp_age CHECK     ...

Oracle之Check约束实例详解

实例讲解在Oracle中如何使用CHECK约束(创建、启用、禁用和删除)

mysql中文解决和check约束

  • 2014-12-15 10:53
  • 10KB
  • 下载

SQL分页排序的实现与分页数据重复问题——以Oracle rownum为例

对于关系数据库来说,直接写SQL拉数据在列表中显示是很常用的做法。但如此便带来一个问题:当数据量大到一定程度时,系统内存迟早会耗光。另外,网络传输也是问题。如果有1000万条数据,用户想看最后一条,这...
  • huzgd
  • huzgd
  • 2011-02-21 00:28
  • 6638
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)