【发布时间】:2012-11-05 15:58:32
【问题描述】:
这是我的 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;
MySQL 是否认为NO_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 运算符工作正常。
【问题讨论】:
-
full 错误信息是什么?
-
@Jocelyn 我编辑了问题以显示我用来捕获错误的方法。如您所见,错误消息正是我所说的。如何找出它认为缺少的表?
-
我昨天看你的问题太快了,我没有注意到你已经声明了一个错误处理程序。
标签: mysql exception variables stored-procedures