Проверьте, присутствуют ли таблицы в базе данных - хранимая процедура - MySQL

Я хочу, чтобы пользователь вводил любую базу данных, которую он хочет проверить, и любые таблицы, которые он хочет проверить. Например, вызов будет выглядеть так:

call tableCheck('MyDatabase', 'table1 table20 table3')

Таким образом, процедура будет проверять эти таблицы (разделенные пробелами). У меня есть код ниже, но у меня проблемы с проверкой других таблиц, он читает первую, но не вторую или третью. Так что мой код не зацикливается или не читает следующее слово.

PROCEDURE `tableCheck` (db VARCHAR(256), db_tables VARCHAR(256))
BEGIN   
DECLARE tbl, tbls VARCHAR(256); 
DECLARE c INT DEFAULT 0;

SET tbls = db_tables;

    WHILE c = 0 DO

        #split word
        SET tbl = SUBSTRING_INDEX(tbls," ",1);
        #go to next string
        SET tbls = SUBSTR(tbls,LENGTH(tbl)+1);

        #check every table
        SELECT table_name AS 'Table Name'
        FROM INFORMATION_SCHEMA.TABLES  
        WHERE table_schema=db AND table_name=tbl;

        IF tbls = 0 THEN 
            SET c = 1;
        END IF;
    END WHILE;
END

1 ответ

Я дал эту ссылку несколько раз сегодня... так что, возможно, она будет работать и для вас. Преобразовать строку с разделителями в список значений

Используя функцию dbo.fnArray по этой ссылке, вы сможете присоединиться к INFORMATION_SCHEMA.TABLES следующим образом:

create procedure dbo.spCheckTable @db varchar(256), @tbls varchar(8000)
as
begin
    select * 
      from INFORMATION_SCHEMA.TABLES i
     inner join dbo.fnArray(@tbls, ' ') t on i.TABLE_NAME = t.arrValue
     where i.TABLE_CATALOG = @db
end

Теперь это хранимая процедура

Другие вопросы по тегам