達夢(禁用|啓動)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;
      
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章