创建存储过程
CREATE
[DEFINER = { user | CURRENT_USER }]
PROCEDURE sp_name ([proc_parameter[,…]])
[characteristic…] routine_body
pro_parameter:
[ IN | OUT | INOUT ] param_name type
characteristic:
COMMENT ‘string’
| LANGUAGE SQL
| [NOT] DETERMINISTIC
| { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
| SQL SECURITY { DEFINER | INVOKE }
routine_body:
Valid SQL routine statement
[begin_label] BEGIN
[statement_list]
……
[end_label] END
声明语句结束符,可自定义:
DELIMITER $$
或
DELIMITER //
声明存储过程:
CREATE PROCEDURE demo_in_parameter(IN p_in int)
存储过程开始和结束符号:
BEGIN…END
变量赋值:
SET @p_in=1
变量定义:
DECLARE l_in int unsigned default 4000000;
创建mysql存储过程,存储函数:
CREATE PROCEDURE存储过程名(参数)
存储过程体:
CREATE FUNCTION 存储名称(参数)
===========================================================
-- 设定使用哪个schema
use test;
-- 显示该schema下存在哪些表;
show tables;
#将语句的结束符号从分号;临时改为两个$$(可以是自定义)
-- mysql> delimiter $$
-- mysql> CREATE PROCEDURE delete_matches(IN p_playerno INTEGER)
-- -> BEGIN
-- -> DELETE FROM MATCHES
-- -> WHERE playerno = p_playerno;
-- -> END $$
-- Query OK, 0 rows affected (0.01 sec)
#将语句的结束符号恢复为分号
#中间要有空格
-- mysql> delimiter ;
#每个嵌套块及其中的每条语句,必须以分号结束,表示过程体结束的begin-end块(又叫做复合语句compound statement),则不需要分号。
-- DELIMITER //
-- CREATE PROCEDURE PROC()
-- BEGIN
-- BEGIN
-- BEGIN
-- statements;
-- END;
-- END;
-- END;
-- //
/*
多行注释
*/
-- 注释符号要与注释内容中间隔一个空格才有效
-- 全局变量:@p_in 局部变量:p_in
-- 定义局部变量:declare 局部变量名 类型 default 默认值
/*
查询数据库中存在哪些存储过程;
select name from mysql.proc where db='数据库名';
查看存储过程的具体内容;
show create procedure '存储过程名';
修改存储过程;
alter procedure '存储过程名';
删除存储过程;
drop procedure '存储过程名';
*/
CREATE DEFINER=`root`@`localhost` PROCEDURE `proc10`()
begin
declare v int;
set v=0;
LOOP_LABLE:loop
if v=3 then
set v=v+1;
ITERATE LOOP_LABLE;
end if;
insert into t values(v);
set v=v+1;
if v>=5 then
leave LOOP_LABLE;
end if;
end loop;
end
结果:
0 |
1 |
2 |
4 |
CREATE DEFINER=`root`@`localhost` PROCEDURE `proc9`()
begin
declare v int;
set v=0;
LOOP_LABLE:loop
insert into t values(v);
set v=v+1;
if v >=3 then
leave LOOP_LABLE;
end if;
end loop;
end
CREATE DEFINER=`root`@`localhost` PROCEDURE `proc8`()
begin
declare v int;
set v=0;
repeat
insert into t values(v);
set v = v+1;
until v >= 5
end repeat;
end
CREATE DEFINER=`root`@`localhost` PROCEDURE `proc7`()
begin
declare var int;
set var = 0;
while var < 6 do
insert into t values(var);
set var = var + 1;
end while;
end