Ich möchte eine öffentliche Err Log-Prozedur erstellen. Mysql 5.7.2 Ich habe versucht, verwenden Bedingung in der gleichen Prozedur, funktioniert. Ich erinnere mich an diese Art und Weise arbeitete vorher, vielleicht alte mysql-Version, oder ich änderte die Einstellung. gerade jetzt, @errNo, @errMsg immer NULL.Verwenden Sie mysql erhalten Diagnose bei einer anderen Prozedur
CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_err_log`()
BEGIN
GET DIAGNOSTICS @cno = NUMBER;
GET DIAGNOSTICS CONDITION 1 @errNo = MYSQL_ERRNO, @errMsg = MESSAGE_TEXT;
SELECT @errNo, @errMsg;
END
CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_test`()
BEGIN
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION
BEGIN
CALL sp_err_log();
END;
select 1;
select * from tbl_not_exist;
select 2;
END
Vielen Dank für das Detail über verschiedene Version. Also verstehe ich, dass es unmöglich ist, dies für> = 5.7.2 – wa56
@ wa56 zu tun: Tatsächlich folgt MySQL nun dem SQL-Standard, siehe [Änderungen in MySQL 5.7.2 (2013-09-21, Meilenstein 12) :: Diagnose-Hinweise ] (https://dev.mysql.com/doc/relnotes/mysql/5.7/en/news-5-7-2.html#mysqld-5-7-2-diagnostics). – wchiquito