Как можно обработать ошибки при дублировании id.Например узнать в каком ряде (INSERT) она возникла, есть ли такой подход ?
Я вот который день пытаюсь его реализовать все не получается. IF, CASE че только не пробовал
DROP TABLE test;
CREATE TABLE test(id INT,PRIMARY KEY (id));
DELIMITER |
DROP PROCEDURE test |
CREATE PROCEDURE test()
BEGIN
INSERT INTO test VALUES (1);
INSERT INTO test VALUES (1);
INSERT INTO test VALUES (1);
END;
|
DELIMITER ;
Ответ
Тут приведен код который игнорирует дубликаты и записывает в переменную какое то сообщение при возникновении конкретной ошибки.
SELECT @myError покажет вам ее.
SELECT @x будет равен 3 поскольку были проигнорированы дубликаты и код дошел до конца.
На счет отловки в каком ряду возникла могу подсказать подход (Не пробовал).
Можно в цикле запустить и инициировать какую нибудь переменную в ++ . А потом при ошибке конкатенировать с error сообщением,ну или что то в этом вроде.
DELIMITER |
DROP PROCEDURE IF EXISTS test |
CREATE PROCEDURE test()
BEGIN
DECLARE CONTINUE HANDLER FOR SQLSTATE '23000' SET @myError = 'You have a error
CALL test();
SELECT @x;
SELECT @myError;
Если надо сделать какое то действие при возникновении ошибок то пользуйтесь IF ... ELSE
DELIMITER |
DROP PROCEDURE IF EXISTS test |
CREATE PROCEDURE test()
BEGIN
DECLARE CONTINUE HANDLER FOR SQLSTATE '23000' SET @x2=1;
SET @x=1;
INSERT INTO test VALUES (1);
SET @x=2;
INSERT INTO test VALUES (2);
SET @x=3;
INSERT INTO test VALUES (3);
IF @x2 = 1 THEN
SELECT 0 AS id,'Dannix net' AS title;
ELSE
SELECT *
FROM tbl_name;
END IF;
END;
|
DELIMITER ;
CALL test();
SELECT @x;
SELECT @x2;
Тут тоже почитайте полезная инфа DECLARE ... HANDLER Syntax
Комментариев нет:
Отправить комментарий