zoukankan      html  css  js  c++  java
  • mysql5.7 虚拟列存储过程

    BEGIN
    DECLARE Done INT DEFAULT 0;
    DECLARE v_tablename VARCHAR(50);
    
    DECLARE rs CURSOR FOR SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'wd' AND TABLE_NAME REGEXP '^(page_).*_.*';
    DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET Done=1;
    OPEN rs;
    FETCH NEXT FROM rs INTO v_tablename;
    REPEAT
    IF NOT Done THEN
    
    set @sqllang = CONCAT("ALTER TABLE " , v_tablename ,  " ADD `creatTime`  varchar (30) GENERATED ALWAYS  AS (replace(json_extract(info,  '$.creatTime' ),'"','' ) ) VIRTUAL");
    PREPARE stmt FROM @sqllang;  
    EXECUTE stmt;
    
    set @sqllang = CONCAT("ALTER TABLE " , v_tablename ,  " ADD `lastScanTime`  varchar (30) GENERATED ALWAYS  AS (replace(json_extract(info,  '$.lastScanTime' ),'"','') ) VIRTUAL");
    PREPARE stmt FROM @sqllang;  
    EXECUTE stmt;
    
    set @sqllang = CONCAT("ALTER TABLE " , v_tablename ,  " ADD `statusCode`     INT(6)  GENERATED ALWAYS  AS (json_extract(info,  '$.statusCode' ))   VIRTUAL");
    PREPARE stmt FROM @sqllang;  
    EXECUTE stmt;
    
    set @sqllang = CONCAT("ALTER TABLE " , v_tablename ,  " ADD `pageType`     varchar(15)  GENERATED ALWAYS  AS (replace(json_extract(info,  '$.pageType' ),'"','') )   VIRTUAL");
    PREPARE stmt FROM @sqllang;  
    EXECUTE stmt;
    
    set @sqllang = CONCAT("CREATE INDEX idx_createTime  ON " , v_tablename , "(creatTime)");
    PREPARE stmt FROM @sqllang;  
    EXECUTE stmt;
    
    set @sqllang = CONCAT("CREATE INDEX idx_lastScanTime ON ",v_tablename,"(lastScanTime)");
    PREPARE stmt FROM @sqllang;  
    EXECUTE stmt;
    
    set @sqllang = CONCAT("CREATE INDEX idx_statusCode  ON " , v_tablename , "(statusCode)");
    PREPARE stmt FROM @sqllang;  
    EXECUTE stmt;
    
    set @sqllang = CONCAT("CREATE INDEX idx_pageType  ON " , v_tablename , "(pageType)");
    PREPARE stmt FROM @sqllang;  
    EXECUTE stmt;
     
    END IF;
    FETCH NEXT FROM rs INTO v_tablename;
    
    UNTIL Done END REPEAT;
    CLOSE rs;
    end
    CREATE DEFINER = 'root'@'%'
    PROCEDURE wd.dropColumnAndIndex()
    BEGIN
    DECLARE Done INT DEFAULT 0;
    DECLARE v_tablename VARCHAR(50);
    DECLARE v_row int DEFAULT 0; 
    
    DECLARE rs CURSOR FOR SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'wd' AND TABLE_NAME REGEXP '^(page_).*_.*';
    DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET Done=1;
    OPEN rs;
    FETCH NEXT FROM rs INTO v_tablename;
    REPEAT
    IF NOT Done THEN
    
    set @sqllang = CONCAT("SELECT count(1) into @row FROM INFORMATION_SCHEMA.statistics  WHERE table_schema= 'wd' AND table_name= '" ,v_tablename,"' AND INDEX_NAME= 'idx_createTime'");  
    PREPARE stmt FROM @sqllang;  
    EXECUTE stmt;
    if (@row > 0) then
        set @sqllang = CONCAT("ALTER TABLE " , v_tablename ,  " DROP INDEX `idx_createTime` ");
        PREPARE stmt FROM @sqllang;  
        EXECUTE stmt;
    end if;
    
    set @sqlexist = CONCAT("SELECT count(1) into @row FROM INFORMATION_SCHEMA.statistics  WHERE table_schema= 'wd' AND table_name= '" ,v_tablename,"' AND INDEX_NAME= 'idx_lastScanTime'");  
    PREPARE stmt FROM @sqlexist;  
    EXECUTE stmt;
    if (@row > 0) then
        set @sqllang = CONCAT("ALTER TABLE " , v_tablename ,  " DROP INDEX `idx_lastScanTime` ");
        PREPARE stmt FROM @sqllang;  
        EXECUTE stmt;
    end if;
    
    set @sqlexist = CONCAT("SELECT count(1) into @row FROM INFORMATION_SCHEMA.statistics  WHERE table_schema= 'wd' AND table_name= '" ,v_tablename,"' AND INDEX_NAME= 'idx_statusCode'");  
    PREPARE stmt FROM @sqlexist;  
    EXECUTE stmt;
    if (@row > 0) then
        set @sqllang = CONCAT("ALTER TABLE " , v_tablename ,  " DROP INDEX `idx_statusCode` "); 
        PREPARE stmt FROM @sqllang;  
        EXECUTE stmt;
    end if;
    
    set @sqlexist = CONCAT("SELECT count(1) into @row FROM INFORMATION_SCHEMA.Columns  WHERE table_schema= 'wd' AND table_name= '" ,v_tablename,"' AND column_name= 'creatTime'");  
    PREPARE stmt FROM @sqlexist;  
    EXECUTE stmt;
    if (@row > 0) then
        set @sqllang = CONCAT("ALTER TABLE " , v_tablename ,  " drop column creatTime ");
        PREPARE stmt FROM @sqllang;  
        EXECUTE stmt;
    end if;
    
    set @sqlexist = CONCAT("SELECT count(1) into @row FROM INFORMATION_SCHEMA.Columns  WHERE table_schema= 'wd' AND table_name= '" ,v_tablename,"' AND column_name= 'lastScanTime'");  
    PREPARE stmt FROM @sqlexist;  
    EXECUTE stmt;
    if (@row > 0) then
        set @sqllang = CONCAT("ALTER TABLE " , v_tablename ,  " DROP COLUMN  lastScanTime ");
        PREPARE stmt FROM @sqllang;  
        EXECUTE stmt;
    end if;
    
    set @sqlexist = CONCAT("SELECT count(1) into @row FROM INFORMATION_SCHEMA.Columns  WHERE table_schema= 'wd' AND table_name= '" ,v_tablename,"' AND column_name= 'statusCode'");  
    PREPARE stmt FROM @sqlexist;  
    EXECUTE stmt;
    if (@row > 0) then
        set @sqllang = CONCAT("ALTER TABLE " , v_tablename ,  " DROP COLUMN statusCode ");
        PREPARE stmt FROM @sqllang;  
        EXECUTE stmt;
    end if;
     
    END IF;
    FETCH NEXT FROM rs INTO v_tablename;
    
    UNTIL Done END REPEAT;
    CLOSE rs;
    end
  • 相关阅读:
    读《构建之法》第一,二,十六章的奇思妙想
    四则运算
    鉴权
    sql注入
    【信息安全作业5】散列函数的应用及其安全性
    结对作业 -GUI四则运算
    阅读《构建之法》四章、十七章
    2016012064+小学四则运算练习软件项目报告
    简单四则运算一
    梦想开花的地方
  • 原文地址:https://www.cnblogs.com/leonkobe/p/7286171.html
Copyright © 2011-2022 走看看