【问题标题】:Why am I getting this MySQL Error 1146 (No Such Table) in my Stored Procedure?为什么我的存储过程中会出现这个 MySQL 错误 1146(没有这样的表)?
【发布时间】: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


【解决方案1】:

你需要把INTO放在正确的位置:

select ...
into var
from table
where ...

【讨论】:

猜你喜欢
  • 2020-11-06
  • 1970-01-01
  • 2012-07-28
  • 2013-12-30
  • 2022-10-15
  • 2021-11-08
  • 1970-01-01
  • 2023-04-04
  • 2020-02-03
相关资源
最近更新 更多