Я хочу, чтобы пользователь вводил любую базу данных, которую они хотят проверить, и любые таблицы, которые они хотят проверить. Например, вызов будет выглядеть так:Проверить, есть ли таблицы в базе данных - хранимая процедура - MySQL
call tableCheck('MyDatabase', 'table1 table20 table3')
Таким образом, процедура проверит эти таблицы (пробел). У меня есть код ниже, но у меня проблемы с проверкой других таблиц, он читает первый, но не второй или третий. SO мой код не зацикливается или не читает следующее слово.
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
Если ваши таблицы начинаются с цифр , 'tbls = 0' всегда будет true. – Uueerdo
Я вижу, что он всегда закрывается после первого цикла. Поэтому я должен найти другой путь для закрытия цикла. @Uueerdo – Jim
Вы можете сделать свой тест что-то вроде этого 'tbls REGEXP '[a-zA-Z] +'' – Uueerdo