0

これが私の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

4

1 に答える 1

-1

INTO を正しい位置に配置する必要があります。

select ...
into var
from table
where ...
于 2012-11-17T01:19:02.490 に答える