Как правильно выполнить обработчик исключений в mysql для сбора данных об ошибках? - PullRequest
0 голосов
/ 14 апреля 2020

Я пытаюсь собрать данные об ошибках из запросов в mysql с помощью хранимых процедур и не могу заставить работать следующее. Интересно, где я иду не так. Я использую этот предыдущий вопрос в качестве руководства:

Как сохранить MySQL Активировать информацию об исключении / ошибке в таблице или в переменных

Мой код ниже должен бросить ошибка, которая регистрируется в моей таблице ошибок, но она не регистрирует никаких ошибок. Где я иду не так?

Мой код:

-- error table
CREATE TABLE IF NOT EXISTS platenet.errors (
     code varchar(30) NOT NULL,
     message TEXT NOT NULL,
     query_type varchar(50) NOT NULL,
     record_id int(11) NOT NULL,
     on_db varchar(50) NOT NULL,
     on_table varchar(50) NOT NULL
);

-- tbl1
CREATE TABLE IF NOT EXISTS platenet.tblOne (
    name varchar(100),
    id INT(3)
);

-- my stored procedure
DELIMITER $$
DROP PROCEDURE IF EXISTS platenet.my_procedure;
CREATE PROCEDURE platenet.my_procedure()
BEGIN
    -- Declare variables to hold diagnostics area information
    DECLARE errorCode CHAR(5) DEFAULT '00000';
    DECLARE errorMessage TEXT DEFAULT '';
    -- Declare exception handler for failed insert
    DECLARE CONTINUE HANDLER FOR SQLEXCEPTION 
    BEGIN
      GET DIAGNOSTICS CONDITION 1
        errorCode = RETURNED_SQLSTATE, errorMessage = MESSAGE_TEXT;
    END;
    -- Perform the insert
    INSERT INTO platenet.tblOne VALUES('James', 'one.4');

    -- Check whether the insert was successful
    IF errorCode != '00000' THEN
        INSERT INTO `errors` (code, message, query_type, record_id, on_db, on_table) VALUES (errorCode, errorMessage, 'insert', NEW.id, 'test_db2', 'users');
    END IF;
END; $$

-- call my procedure
CALL platenet.my_procedure();

-- error table should have one error logged
SELECT COUNT(*) FROM platenet.errors;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...