达梦(禁用|启动)constraint


### Code Reference
  • URL:p133 DM8系统管理员手册
  • DESC:达梦(禁用|启动)constraint(和oracle的语法有些差异)
  • Last Update:2020-7-2 15:54
    • 四种状态
      • disable novalidate 既不会约束新增数据也不会验证已有数据,等同于disable
      • enable novalidate 约束新增数据但不会验证已有数据
      • disable validate 约束新增数据但不会验证已有数据,启用后禁止DML
      • enable validate 约束新增数据并验证已有数据,等同于enable
    • 设置 constraint 状态
        select * from SYS.DBA_CONSTRAINTS T where T.TABLE_NAME = 'WhichCanEncrypt';
        alter table test."WhichCanEncrypt" enable|disable constraint "CK_6_1";
      

### Code Reference
  • DESC:dameng 修改check constraint 状态过程
  • Last Update:2020-7-2 16:56
    • 接口(pi_mode 为0是置check constraint 为disable,其他为置为enable)

      call “TEST”.“disposeCheckConstraint”(‘TEST’,‘WhichCanEncrypt’,1);
    • 授权

      grant execute on test.“disposeCheckConstraint” to PUBLIC;

      grant select on SYS.DBA_CONSTRAINTS to public;
    • 实现
        create or replace procedure test."disposeCheckConstraint"("pv_schemaName" varchar2(100),
                                                                  "pv_tableName"  varchar2(100),
                                                                  "pi_mode"       number(1)) as
        declare  type L_cursortyp is ref cursor;
          L_cursor       L_cursortyp;
          Lv_sql         varchar2(200);
          Lv_disposeMode varchar2(200):=0;
        begin
          if "pi_mode" = 0 then
            Lv_disposeMode := '" DISABLE CONSTRAINT "';
          else
            Lv_disposeMode := '" ENABLE CONSTRAINT "';
          end if;
          open L_cursor for
            select 'ALTER TABLE "' || "OWNER" || '"."' || "TABLE_NAME" ||
                   Lv_disposeMode || "CONSTRAINT_NAME" || '"'
              from SYS.DBA_CONSTRAINTS T
             where 1 = 1
               and T.OWNER = "pv_schemaName"
               and T.TABLE_NAME = "pv_tableName"
               and T.CONSTRAINT_TYPE = 'C';
          loop
            fetch L_cursor
              into Lv_sql;
            exit when L_cursor%notfound;
            begin
                execute IMMEDIATE Lv_sql;
                print Lv_sql;
            exception
                when others then
                    null;
            end;
          end loop;
          close L_cursor;
        end;
      

你可能感兴趣的:(dameng,dameng)