这里是存储过程。我想要做的是循环遍历所有数据库并查找特定表中的行数。如果count为0,则打印表格。Mysql存储过程。这个问题有什么问题?
DELIMITER $$
CREATE PROCEDURE checkTableData()
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE db VARCHAR(255);
DECLARE appDBs CURSOR FOR SELECT schema_name FROM information_schema.schemata WHERE schema_name LIKE 'db_%';
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
DECLARE intCount INT default;
OPEN appDBs;
REPEAT
FETCH appDBs INTO db;
IF NOT done THEN
SET @SQL = CONCAT('SELECT @intCount = COUNT(1) FROM ', db, '.SMS_CODES');
EXECUTE @SQL;
IF @intCount = 0 THEN
SELECT db;
END IF;
END IF;
UNTIL done END REPEAT;
CLOSE appDBs;
END $$
delimiter ;
的错误是在该行
IF NOT done THEN
编辑: 试过IF done != 0 THEN
。错误消息:
You have an error in your SQL; Check the manual that corresponds to your MySQL server version for the right syntax to use near ;
OPEN appDBs;
REPEAT
FETCH appDBs INTO db;
`IF don' at line 7
编辑: 每@Gerve我更新了proc和移动intCount声明顶部,上面的指针,然后将其设置为0这样的错误已经一去不复返了。现在,另一个错误是:
You have an error in your SQL; Check the manual that corresponds to your MySQL server version for the right syntax to use near '@SQL
@SQL = CONCAT('SELECT @intCount = COUNT(1) FROM ', db, '.ECR_SMS_COUNTRY_CODES');
EXECUTE @SQL;
END IF;
UNTIL done END REPEAT;
CLOSE appDBs;
EN' at line 15
有什么错误味精? – Drahcir 2013-02-19 19:04:53
'done'是一个int,你尝试完成= 0吗? – Sebas 2013-02-19 19:06:25
试过了。更新了帖子。谢谢! – 2013-02-19 19:10:38