zoukankan      html  css  js  c++  java
  • Oracle ->> ENABLE VALIDATE & DISABLE VALIDATE

    这里找到一篇博文对这两个用法的解释:http://www.cnblogs.com/rootq/archive/2008/09/23/1297400.html

    启用约束:

    enable( validate) :启用约束,创建索引,对已有及新加入的数据执行约束. e

    enable novalidate :启用约束,创建索引,仅对新加入的数据强制执行约束,而不管表中的现有数据. 

    禁用约束:

    disable( novalidate):关闭约束,删除索引,可以对约束列的数据进行修改等操作.

    disable validate :关闭约束,删除索引,不能对表进行 插入/更新/删除等操作.

    这里自己做了下实验,也确实验证上面的说法。

    下面是DISABLE VALIDATE的实验结果

    declare 
          num   number; 
    begin 
          select count(1) into num from all_tables where TABLE_NAME = 'TEST2'; 
          if   num=1   then 
              execute immediate 'drop table TEST2'; 
          end   if; 
    end; 
    /
    
    create table Test2(
    col1 int CONSTRAINT cons_test2_1 NOT NULL CHECK(col1>10) DISABLE VALIDATE,
    col2 varchar(100) null
    );
    /
    
    insert into Test2(col1,col2) values(1,'a');

    在行 32 上开始执行命令时出错:
    insert into Test2(col1,col2) values(1,'a')
    命令出错, 行: 32 列: 1
    错误报告:
    SQL 错误: ORA-25128: 不能对带有禁用和验证约束条件 (SYSTEM.SYS_C009875) 的表进行插入/更新/删除
    25128. 00000 -  "No insert/update/delete on table with constraint (%s.%s) disabled and validated"
    *Cause:    Try to insert/update/delete on table with DISABLE VALIDATE constraint.
    *Action:   Change the constraint's states.


    下面是ENANLE VALIDATE的实验结果

    declare 
          num   number; 
    begin 
          select count(1) into num from all_tables where TABLE_NAME = 'TEST2'; 
          if   num=1   then 
              execute immediate 'drop table TEST2'; 
          end   if; 
    end; 
    /
    
    create table Test2(
    col1 int CONSTRAINT cons_test2_1 NOT NULL CHECK(col1>10) ENABLE VALIDATE,
    col2 varchar(100) null
    );
    /
    
    insert into Test2(col1,col2) values(1,'a');

    在行 32 上开始执行命令时出错:
    insert into Test2(col1,col2) values(1,'a')
    错误报告:
    SQL 错误: ORA-02290: 违反检查约束条件 (SYSTEM.SYS_C009877)
    02290. 00000 -  "check constraint (%s.%s) violated"
    *Cause:    The values being inserted do not satisfy the named check
              
    *Action:   do not insert values that violate the constraint.


    下面是ENABLE NOVALIDATE的实验结果。

    declare 
          num   number; 
    begin 
          select count(1) into num from all_tables where TABLE_NAME = 'TEST2'; 
          if   num=1   then 
              execute immediate 'drop table TEST2'; 
          end   if; 
    end; 
    /
    
    create table Test2(
    col1 int,
    col2 varchar(100) null
    );
    /
    
    insert into Test2(col1,col2) values(1,'a');
    /
    
    alter table Test2 add CONSTRAINT cons_test2_1 CHECK(col1>10) ENABLE NOVALIDATE;
    /
    
    select * from Test2;
    /
    
    insert into Test2(col1,col2) values(2,'b');

    table TEST2 已创建。 1 行已插入。 table TEST2已变更。 >>Query Run In:查询结果 1

    在行 41 上开始执行命令时出错: insert into Test2(col1,col2) values(2,'b') 错误报告: SQL 错误: ORA-02290: 违反检查约束条件 (SYSTEM.CONS_TEST2_1) 02290. 00000 -  "check constraint (%s.%s) violated" *Cause:    The values being inserted do not satisfy the named check            *Action:   do not insert values that violate the constraint.

  • 相关阅读:
    Kali linux installation instruction
    Source Insight(C/C++/Java编辑器)用法
    Wear OS软件安装指南
    外卖ERP管理系统(一)
    邮轮ERP系统
    使用CEfSharp 下载文件 弹出保存框 IDownloadHandler
    cefSharp通过js操控页面,含跨域操控
    C# Winform 未能加载文件或程序集"System.Data.SQLite"或它的某一个依赖项。试图加载格式不正确的程序
    无法将类型为“System.__ComObject”的 COM 对象强制转换为类类型“mshtml.HTMLInputElementClass
    COMBOBOX绑定DICTIONARY做为数据源
  • 原文地址:https://www.cnblogs.com/jenrrychen/p/4604996.html
Copyright © 2011-2022 走看看