Проверьте, присутствуют ли таблицы в базе данных - хранимая процедура - 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
Теперь это хранимая процедура