SET sql_mode=ORACLE; --echo # --echo # sql_mode=ORACLE: Predefined exceptions: TOO_MANY_ROWS, NO_DATA_FOUND, DUP_VAL_ON_INDEX --echo # --echo # --echo # Testing NO_DATA_FOUND and TOO_MANY_ROWS --echo # CREATE TABLE t1 (a INT); INSERT INTO t1 VALUES (10),(20); DELIMITER $$; CREATE PROCEDURE p1(lim INT, res OUT VARCHAR) AS a INT; BEGIN SELECT a INTO a FROM t1 LIMIT lim; EXCEPTION WHEN TOO_MANY_ROWS THEN res:='--- too_many_rows cought ---'; WHEN NO_DATA_FOUND THEN res:='--- no_data_found cought ---'; END; $$ DELIMITER ;$$ SET @res=''; CALL p1(0, @res); SELECT @res; CALL p1(2, @res); SELECT @res; DROP PROCEDURE p1; DROP TABLE t1; --echo # --echo # Testing DUP_VAL_ON_INDEX --echo # CREATE TABLE t1 (a INT PRIMARY KEY); DELIMITER $$; CREATE PROCEDURE p1(res OUT VARCHAR) AS BEGIN INSERT INTO t1 VALUES (10); INSERT INTO t1 VALUES (10); EXCEPTION WHEN DUP_VAL_ON_INDEX THEN res:='--- dup_val_on_index cought ---'; END; $$ DELIMITER ;$$ SET @res=''; CALL p1(@res); SELECT @res; SELECT * FROM t1; DROP PROCEDURE p1; DROP TABLE t1;