• 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
  • 相关阅读:
    go install
    web网络安全系统
    Web图片分享系统
    web图库网站
    web视频播放网站
    web商业银行管理平台
    web科技管理信息平台
    web工艺品销售平台
    web房产网站
    感谢!
  • 原文地址:https://www.cnblogs.com/leonkobe/p/7286171.html
Copyright © 2020-2023  润新知