• Mysql使用存储过程生成库表数据量统计,并放入表中


    -- 创建存储过程之前需判断该存储过程是否已存在,若存在则删除
    DROP PROCEDURE IF EXISTS getTableInfo;
    -- 创建存储过程
    CREATE PROCEDURE getTableInfo()
    BEGIN        
       -- 定义变量
       DECLARE s int DEFAULT 0;
       DECLARE dbname varchar(255);
       DECLARE tabname varchar(256);
       -- 定义游标,并将sql结果集赋值到游标中
       DECLARE tabs CURSOR FOR select table_schema,table_name from dq_tables;
       -- 声明当游标遍历完后将标志变量置成某个值
       DECLARE CONTINUE HANDLER FOR NOT FOUND SET s=1;
       -- 创建结果存放表
        create table if not exists `dq_tables` (
            `table_schema` VARCHAR ( 255 ) DEFAULT NULL COMMENT '数据库名称',
            `dept_name` VARCHAR ( 256 ) DEFAULT NULL COMMENT '委办局名称',
            `table_name` VARCHAR ( 257 ) DEFAULT NULL COMMENT '表英文名称',
            `table_comment` VARCHAR ( 258 ) DEFAULT NULL COMMENT '表中文名称',
            `table_rows` VARCHAR ( 259 ) DEFAULT NULL COMMENT '数据行数',
            `data_size` VARCHAR ( 260 ) DEFAULT NULL COMMENT '表大小',
            `create_time` VARCHAR ( 261 ) DEFAULT NULL COMMENT '创建时间',
            `update_time` VARCHAR ( 262 ) DEFAULT NULL COMMENT '更新时间',
            `is_cp` VARCHAR ( 262 ) DEFAULT NULL COMMENT '是否统计列完整性',
            `update_type` VARCHAR ( 255 ) DEFAULT NULL COMMENT '更新类型',
            `update_freq` VARCHAR ( 255 ) DEFAULT NULL COMMENT '更新频率',
            `db_type` VARCHAR ( 255 ) DEFAULT NULL COMMENT '入库方式' 
        ) ENGINE = INNODB DEFAULT CHARSET = utf8 COMMENT = '数据质量-数据表相关信息';
        
        -- 插入库表原始数据
        insert into  dq_tables
        select
          t.table_schema as 数据库名称,
          null ,
          t.table_name as 表英文名称,
          t.table_comment as 表中文名称,
          null as 数据行数,
          ( t.data_length / 1024 ) as 表大小,
          t.create_time as 创建时间,
          t.update_time as 更新时间 ,
          1,
          null,
          null,
          null
        from information_schema.`tables` t 
        left join dq_tables d on t.table_name = d.table_name and t.table_schema = d.table_schema
        where  d.table_name is null  and t.table_schema not in ('information_schema','mysql','performance_schema','test','sakila','sys') and t.table_name <> 'dq_tables';        
    -- 打开游标
    open tabs;
    -- 当s不等于1,也就是未遍历完时,会一直循环
    while s<>1 do
    -- 执行业务逻辑
    fetch tabs into dbname,tabname;
    -- 更新数据行数
    set @esql =CONCAT("update dq_tables set table_rows = (select count(1) from ",dbname,'.',tabname,") where table_schema='",dbname,"' and table_name='",tabname,"' ");
    PREPARE stmt FROM @esql;
    EXECUTE stmt ; 
    end while;  -- 当s等于1时表明遍历以完成,退出循环
    -- 关闭游标
    close tabs;
    DEALLOCATE PREPARE stmt; -- 释放连接
    END;
  • 相关阅读:
    洛谷 P3146 [USACO16OPEN]248
    洛谷 P2633 Count on a tree
    bzoj 1040 1040: [ZJOI2008]骑士
    poj 3417 Network
    洛谷 P2149 [SDOI2009]Elaxia的路线
    2、小文件问题解决
    ☀【组件
    -_-#【JS】隐含全局变量
    -_-#flash播放器自适应
    -_-#【插件】MD5
  • 原文地址:https://www.cnblogs.com/zzzmublog/p/13031957.html
Copyright © 2020-2023  润新知