これがストアドプロシージャです。私がやろうとしているのは、すべてのデータベースをループして、特定のテーブルの行数を見つけることです。count が 0 の場合、テーブルを出力します。
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