1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| USE db;
DROP procedure IF EXISTS cascade_delete;
delimiter $$
CREATE PROCEDURE cascade_delete(IN current_id int(4))
begin
declare i int(4);
declare done bool DEFAULT 0;
declare lit cursor FOR SELECT id FROM elements WHERE parent=current_id;
declare continue handler FOR SQLSTATE '02000' SET done=1;
SET @@max_sp_recursion_depth=255;
open lit;
repeat
fetch lit INTO i;
IF NOT done then
call cascade_delete(i);
end IF;
until done end repeat;
close lit;
DELETE FROM elements WHERE id=current_id;
end$$
delimiter; |