2017-12-15 18 views
0

私はパブリックエラーログプロシージャを構築したいと考えています。 Mysql 5.7.2 私は、同じ手順で動作します。 私は以前このmysqlバージョンが動作していたことを覚えています。あるいは設定を変更しました。今のところ、@errNo、@errMsgは常にNULLです。mysqlを使用して別の手順で診断を取得

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 

答えて

0

SQL文鮮明なのMySQL 5.7.2

13.6.7.7 The MySQL Diagnostics Area :: 13.6.7.7.3 How the Diagnostics Area is Populated

< ...と、次のように診断領域を設定:

  • サーバは、解析後に文の実行を開始すると、テーブルを使用する非診断文の診断領域をクリアします。 ...

...

db-fiddleを参照してください。

> =のMySQL 5.7.2

13.6.7.7 The MySQL Diagnostics Area :: 13.6.7.7.3 How the Diagnostics Area is Populated

...

SQL文をクリアし、次のように診断領域を設定:

  • サーバー構文解析した後に文の実行を開始し、診断領域をクリアします。非診断的な発言。 (MySQLの5.7.2前に、サーバはテーブルを使用する非診断文の診断エリアをクリアします。)...

...

db-fiddleを参照してください。

可能な代替ソリューション(> =のMySQL 5.7.2):

DELIMITER // 

CREATE PROCEDURE `sp_err_log`(
    `_MYSQL_ERRNO` INT, 
    `_MESSAGE_TEXT` TEXT 
) 
BEGIN 
    SELECT 
    `_MYSQL_ERRNO`, 
    `_MESSAGE_TEXT`; 
END// 

CREATE PROCEDURE `sp_test`() 
BEGIN 
    DECLARE CONTINUE HANDLER FOR SQLEXCEPTION 
    BEGIN 
    DECLARE 
     `_NUMBER`, 
     `_MYSQL_ERRNO` INT; 
    DECLARE 
     `_MESSAGE_TEXT` TEXT; 
    GET STACKED DIAGNOSTICS `_NUMBER` = NUMBER; 
    GET STACKED DIAGNOSTICS CONDITION `_NUMBER` 
     `_MYSQL_ERRNO` = MYSQL_ERRNO, 
     `_MESSAGE_TEXT` = MESSAGE_TEXT; 
    CALL `sp_err_log`(
     `_MYSQL_ERRNO`, 
     `_MESSAGE_TEXT` 
    ); 
    END; 
    SELECT 1; 
    SELECT NULL 
    FROM `tbl_not_exist`; 
    SELECT 2; 
END// 

DELIMITER ; 

db-fiddleを参照してください。

+0

ご利用いただきありがとうございます。それでは、> = 5.7.2 – wa56

+0

@ wa56については不可能であることを理解しています。実際、MySQLは現在SQL標準に準拠しています。MySQL 5.7.2の変更点(2013-09-21、マイルストーン12)::診断メモ](https://dev.mysql.com/doc/relnotes/mysql/5.7/en/news-5-7-2.html#mysqld-5-7-2-diagnostics)を参照してください。 – wchiquito

関連する問題