包含存储过程的创建,游标的使用,临时表的使用和prepare的时候。
不过例子中, alter procedure并不能在perpare里面使用。
[sql]
CREATE DEFINER = ‘root’@’%’ PROCEDURE new_proc1
()
NOT DETERMINISTIC
CONTAINS SQL
SQL SECURITY INVOKER
COMMENT ”
BEGIN
DECLARE done BOOLEAN DEFAULT FALSE;
declare spname varchar(300);
declare dbname varchar(100);
DECLARE cur1 CURSOR FOR SELECT specific_name FROM information_schema.routines WHERE routine_schema = ‘mv1’ and routine_type = ‘procedure’;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
create temporary table IF NOT EXISTS allsp(
spname VARCHAR(300) NULL
);
OPEN cur1;
read_loop: LOOP
FETCH cur1 INTO spname;
IF done THEN
LEAVE read_loop;
END IF;
INSERT INTO allsp VALUES (spname);
set @s = concat(‘ALTER PROCEDURE ‘,spname,’ SQL SECURITY INVOKER’);
PREPARE stmt1 FROM @s;
EXECUTE stmt1;
DEALLOCATE PREPARE stmt1;
END LOOP;
CLOSE cur1;
select * from allsp;
END;
[/sql]