当前位置:首页 > 个人杂谈 > 正文内容

使用了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

  • 评论:(1)

已有 1 位网友发表了一针见血的评论,你还等什么?

◎欢迎大家参与讨论