* Следующий код демонстрирует обработку исключений в MySQL * Процедура test1 генерирует ошибку и отваливается по ошибке * Процедура test2 перехватывает ошибку и продолжает выполнение DROP TABLE IF EXISTS test; CREATE TABLE test ( name VARCHAR(30) ); # Процедура 1, которая генерит исключительную ситуацию DROP PROCEDURE IF EXISTS test1; delimiter $$ CREATE PROCEDURE test1 (n INTEGER) BEGIN DECLARE err INTEGER DEFAULT FALSE; DECLARE x INT DEFAULT 5; DECLARE EXIT HANDLER FOR SQLSTATE '45000' SET err = TRUE; WHILE x > 0 DO IF x=n THEN SIGNAL SQLSTATE '45000' SET message_text='x=3'; END IF; SET x = x - 1; END WHILE; INSERT INTO test (name) VALUES (CONCAT('test1 ',n)); END$$ delimiter ; # Процедура 2, которая перехватывает исключительную ситуацию DROP PROCEDURE IF EXISTS test2; delimiter $$ CREATE PROCEDURE test2 () BEGIN DECLARE err INTEGER DEFAULT FALSE; DECLARE y INT DEFAULT 1; DECLARE CONTINUE HANDLER FOR SQLSTATE '45000' SET err = TRUE; WHILE y <= 3 DO SET @n = y; CALL test1(@n); SET y = y + 1; END WHILE; INSERT INTO test (name) VALUES (CONCAT('test2')); END$$ delimiter ; * mysql: CALL test2();
SQL Справочник v0.05 © 2007-2025 Igor Salnikov aka SunDoctor