使用了MySQL写了一个存储过程
作者: 葛屹肃 | 日期: 2021-08-07 | 分类: 个人杂谈
以往也使用过MySQL数据库,一直也只限于网站的后台数据库,甚少涉及其SQL的操作,上次进行3表关联查询也是查找资料才解决的,都是由Wordpress自动安装,自动配置好。
年初,公司招了一批新人,是做WEB系统,毫无疑问数据库使用MySQL,为何?当然是是免费。而最近,以往的一个项目要升级,于是,让新人们来练练手。
为了加快项目进度,数据库的逻辑处理部分还是我来负责。之前项目是使用ORACLE数据库,有一些逻辑都是函数与存储过程来处理的,刚好MySQL也支持函数与存储过程。稍为了解下,原来ORACLE与MySQL的语法如此接近,做过简单的修改的即可使用。
先从简单入手,本来想先写函数,无奈在MySQL8.0下一直创建失败,只好转为存储过程,反正语法是一样的,只是调用有差异。
以下是一个流水号(0001~ZZZZ)自增算法,直接从表t_yh_info取出最大的值,再自增1,返回流水号。
CREATE PROCEDURE `get_next_seq`(out list varchar(50))
BEGIN
– —————————————
– 功能:获取流水号
– 日期:2021-08-05
– —————————————declare max_seq varchar(50);
declare letter varchar(40);
declare S1 varchar(4);
declare S2 varchar(4);
declare S3 varchar(4);
declare S4 varchar(4);
declare len int;select max(serial_number) into max_seq from t_yh_info;
– set max_seq = seq;
set list = null;if (max_seq is null) or (length(max_seq) < 4) then
set list = ’0001′;
end if;if list is null then
set letter = ’0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ’;
set S4 = SUBSTR(max_seq,4,1);
set S3 = SUBSTR(max_seq,3,1);
set S2 = SUBSTR(max_seq,2,1);
set S1 = SUBSTR(max_seq,1,1);set len = instr(letter,S4);
if len < 36 then
set S4 = SUBSTR(letter,len+1,1);
else
set S4 = ’0′;
set len = instr(letter,S3);
if len < 36 then
set S3 = SUBSTR(letter,len+1,1);
else
set S3 = ’0′;
set len = instr(letter,S2);
if len < 36 then
set S2 = SUBSTR(letter,len+1,1);
else
set S2 = ’0′;
set len = instr(letter,S1);
if len < 36 then
set S1 = SUBSTR(letter,len+1,1);
else
set S1 = ’0′;
end if;
end if;
end if;
end if;set list = CONCAT(S1,S2,S3,S4);
if (list = ’0000′) or (list > ‘ZZZZ’) then
set list = ’0001′;
end if;
end if;
END
这是一次简单的数据库功能转化,以后使用的MySQL的机会只会越来越多,不过也没关系,不了解的百度一下就知道了。
文章链接:https://www.geyisu.com/2087.html