MySQLストアドプロシージャでは、次のようにSQL例外を処理しています。
DECLARE EXIT HANDLER FOR SQLEXCEPTION
BEGIN
SELECT "SQL exception occured." AS "SQL Exception";
SHOW ERRORS;
SHOW WARNINGS;
ROLLBACK;
END;
SQL exception occured
メッセージが表示され、トランザクションがロールバックされるため、例外がスローされていることを知っています。ただし、SHOW ERRORS
またはSHOW WARNINGS
テーブルには何も入力されていません。これはなぜですか。また、どのSQL例外がスローされているかをどのように確認できますか?
ミステリー例外の原因となっているSQLステートメントは次のとおりです。
SELECT IF(count(*) = 0, TRUE, FALSE)
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA='myDatabase'
AND TABLE_NAME='exam';
編集:
ボヘミアンは、例外がハンドラーに飲み込まれていることを私に知らせました。では、例外が何であるかを確認し、それでもロールバックするにはどうすればよいですか?Javaのcatchブロックでは、Exception.getMessage()
またはを使用して例外を確認できますException.printStackTrace()
。MySQLに同様の機能はありますか?