检查数据库中是否存在表 - 存储过程 - MySQL

时间:2015-09-30 19:51:37

标签: mysql stored-procedures space delimited

我希望用户输入他们想要检查的数据库以及他们想要检查的任何表。例如,调用将如下所示:

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 个答案:

答案 0 :(得分:0)

我今天已经多次给出了这个链接......所以也许它对你也有用。 Convert a delimited string to a list of values

使用该链接中的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

现在是一个存储过程