количество строк (user) для каждой таблицы, начинающейся с cm в схеме - PullRequest
0 голосов
/ 12 февраля 2019

Мне нужен список всех таблиц с соответствующим количеством записей NULL в столбце «пользователь».Я напечатал все имена таблиц, начиная с cm, используя

SELECT
    TABLE_NAME
FROM
    INFORMATION_SCHEMA.TABLES WHERE (TABLE_NAME LIKE 'cm%') ;

, но для каждой таблицы я хочу запустить

SELECT COUNT(1) FROM <TABLENAME> WHERE `create_user` IS NULL
 OR `create_time` IS NULL 

и напечатать

1 Ответ

0 голосов
/ 12 февраля 2019

Создайте таблицу ниже, заменив ее на правильное имя базы данных:

CREATE TABLE `db`.`tbl_count_null` (
  `tableschema` varchar(64) NOT NULL DEFAULT '',
  `tablename` varchar(64) NOT NULL DEFAULT '',
  `qtd` char(0) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Посмотрите, встречает ли вас следующая процедура:

CREATE DEFINER=`user`@`%` PROCEDURE `nameprocedure`()
BEGIN
  DECLARE x, y LONGTEXT;
  DECLARE done INT DEFAULT 0;
  DECLARE databasesCursor CURSOR FOR 
    SELECT TABLE_SCHEMA, TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME LIKE 'cm%';
  DECLARE CONTINUE HANDLER 
                    FOR SQLSTATE '02000' SET done = 1;

        OPEN databasesCursor;
            myLoop: LOOP
                FETCH databasesCursor INTO x, y;

                IF NOT done THEN
                    SET @query = CONCAT("INSERT INTO`db`.`tbl_count_null` (tableschema, tablename, qtd) SELECT '",x,"' AS `schema`,'",y,"' AS `table`,COUNT(1) FROM `",x,"`.`",y,"` WHERE `create_user` IS NULL OR `create_time` IS NULL;");
                    PREPARE stmt FROM @query;
                    EXECUTE stmt;
                    DEALLOCATE PREPARE stmt;

                END IF;
            END LOOP myLoop;

        CLOSE databasesCursor;
END;

После создания вышеописанной процедуры, вызовите с помощьюкоманда:

call db.nameprocedure;

Убедитесь, что записи были вставлены в таблицу db. tbl_count_null

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...