mysql 存储过程
存储过程procedure是实现特定功能的语句集合,编译后存在数据库中。
通过存储过程的名字,并给定参数来调用。
procedure
delimiter
declare
创建
drop procedure if exists p1; --如果过程存在,删除。 delimiter $$ -- 定义存储过程边界符 create procesure p1(in a1 varchat(50),in a2 int,out b1 int) begin end $$ -- 执行 delimiter; -- 还原边界符
- 通常在创建之前先删除过程。drop procedure if exists 过程名
- 使用delimiter定义标识符。delimiter $$
- 存储过程结束后还原标识符。delimiter ;
- 参数 IN|OUT|INOUT参数名称 数据类型
IN,输入参数,修改参数的值不能被返回OUT,输出参数,可被更改并返回INOUT,输入输出参数,可被更改并返回
- 结构体在BEGIN和END之间。可以定义变量和逻辑。
结构体
变量
- 定义 declare
- declare i int default 0;
- declare s varchar(50) default '';
- declare x,y int;
- 赋值 可以是固定值,或者数据表查询后赋值。
- set i=9;
- set str='hello';
- select salary into i from person where name='张三';
循环
-
while 条件 do …… end while;
/* 循环插入数据 */ CREATE TABLE IF NOT EXISTS student(id int ,sname VARCHAR(20)); drop procedure if exists p1; delimiter $$ CREATE procedure p1(in i int) #!!这里不能加分号 BEGIN declare x int; set x=1; WHILE x<i+1 do INSERT INTO student VALUES(x,'测试'); set x=x+1; end WHILE; END $$ delimiter; call p1(12); SELECT * from student;
-
loop_name: loop if 条件1 then leave loop_name; /* 相当于 break */ end if; if 条件2 then iterate loop_name; /* 相当于 continue */ end if; 语句; end loop loop_name; -
repeat 语句; until 条件; end repeat;
条件
-
if (a<5) then …… end if; -
if(a>10)then …… elseif (a>5) then …… else …… end if;
- 输入两个数字,比较大小并输出结果。
drop procedure if exists t1; delimiter $$ CREATE procedure t1(in a1 int,in a2 int,out a3 VARCHAR(20)) BEGIN if a1>a2 then set a3='A1大'; ELSEIF a1<a2 then set a3='A2大'; ELSE SET a3='一样大'; end if; END $$ delimiter; call t1(22,22,@S); SELECT @s
-
case 判断条件 when 条件1 then 结果1; when 条件2 then 结果2; else 结果3; end case;
- 输入成绩,判断是否及格。
drop procedure if exists t2; delimiter $$ CREATE procedure t2(in score DOUBLE,out x VARCHAR(20)) BEGIN case when score >80 then set x='优秀'; when score >60 then set x='及格'; ELSE set x='不及格'; end case; END $$ delimiter; call t2(60.22,@S); SELECT @s
-
判断星期几
drop procedure if exists t3; delimiter $$ CREATE procedure t3(in d int,out x VARCHAR(20)) BEGIN case d when 1 then set x='星期一'; when 2 then set x='星期二'; when 3 then set x='星期三'; when 4 then set x='星期四'; ELSE set x='不知道'; end case; END $$ delimiter; call t3(2,@S); SELECT @s
其他
查看[指定数据库]已创建的存储过程: show PROCEDURE STATUS WHERE db='db_test' /* 查看存储过程定义内容 */ SHOW CREATE PROCEDURE 数据库.存储过程名;

浙公网安备 33010602011771号