mysql创建表报错1146,为什么在存储过程中收到此MySQL错误1146(无此类表)?

Here is my MySQL stored procedure:

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;

Does MySQL think NO_EXAM_TABLE is a table instead of a variable?

EDIT

This is what I'm using to catch the error:

DECLARE EXIT HANDLER FOR 1146 BEGIN SELECT "42S02 (ER_NO_SUCH_TABLE) Table doesn't exist" as 'ERROR_NO SQLSTATE'; ROLLBACK; END;

EDIT2

I've narrowed the problem down to this clause:

AND cols.TABLE_NAME = 'exam';

If I change it to this, it works:

AND cols.TABLE_NAME LIKE 'exam';

I don't understand why the = operator is causing an error and the LIKE operator is working fine.

解决方案

You need to put the INTO in the correct position:

select ...

into var

from table

where ...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值