Mysql存储过程和函数可以理解为一段SQL的集合,它们被事先编译好并且存储在数据库中。
基本语法:
创建:
create procedure 存储过程名(参数列表) 其他修饰符 存储过程体
调用:
call 存储过程名(参数列表)
以下是使用Mysql存储过程生成指定格式的订单号:
1 drop procedure if exists `add_repair`; 2 delimiter // 3 create definer=`root`@`192.168.1.243` procedure `add_repair`(in n int) 4 begin 5 declare i int default 0; 6 7 -- 订单编号 8 declare orderNamePre varchar(25) default 'WX'; -- 订单格式,开头符号 9 declare currentDate varchar(255); 10 declare maxNO int default 0; 11 declare oldOrderNo varchar(255) default ''; 12 declare newOrderNo varchar(255) default ''; 13 14 -- 订单编号操作 15 select date_format(now(), '%Y%m%d') into currentDate; 16 17 -- 如果当日已有历史订单,截取相应数据存入变量 18 select ifnull(bill_number,'') into oldOrderNo from repair_bill 19 where substring(bill_number, 3, 8)=currentDate 20 and substring(bill_number,1,2) = orderNamePre 21 order by id desc limit 1; 22 23 if oldOrderNo != '' then 24 set maxNO=convert(substring(oldOrderNo,-5),decimal); 25 end if; 26 27 -- 向表repair_bill插入数据:生成维修单 28 select concat(orderNamePre, currentDate, lpad((maxNO+1),5,'0')) into newOrderNo; 29 30 insert into repair_bill (bill_number,...) values (newOrderNo,...); 31 set maxNo = maxNo + 1; 32 set i = i + 1; 33 end while; 34 end // 35 delimiter ; 36 37 call add_repair(1);