これが私のMySQLストアドプロシージャです:
CREATE PROCEDURE myStoredProc(DB_NAME varchar(30))
BEGIN
DECLARE NO_EXAM_TABLE BOOLEAN;
/*This one throws 'No Such Table' exception*/
SELECT IF(count(*) = 0, TRUE, FALSE)
FROM information_schema.COLUMNS cols
WHERE cols.TABLE_SCHEMA = DB_NAME
AND cols.TABLE_NAME = 'exam'
INTO NO_EXAM_TABLE;
/*But this one works fine (removed the INTO clause)*/
SELECT IF(count(*) = 0, TRUE, FALSE)
FROM information_schema.COLUMNS cols
WHERE cols.TABLE_SCHEMA = DB_NAME
AND cols.TABLE_NAME = 'exam';
END;
MySQLNO_EXAM_TABLE
は変数ではなくテーブルだと思いますか?
編集
これは私がエラーをキャッチするために使用しているものです:
DECLARE EXIT HANDLER FOR 1146 BEGIN SELECT "42S02 (ER_NO_SUCH_TABLE) Table doesn't exist" as 'ERROR_NO SQLSTATE'; ROLLBACK; END;
EDIT2
問題を次の節に絞り込みました。
AND cols.TABLE_NAME = 'exam';
これに変更すると、動作します:
AND cols.TABLE_NAME LIKE 'exam';
=
オペレーターがエラーを引き起こし、オペレーターが正常に動作している理由がわかりませんLIKE
。