现有存储过程如下:
delimiter //CREATE PROCEDURE sequence ( IN seqName varchar(30), IN argTime Date, OUT val BIGINT )BEGIN
declare maxValue int; declare nowValue bigint;
declare minValue int;
select * from comm_seq where seq_name=seqName for update; select max_value into maxValue from comm_seq where seq_name=seqName ; select min_value into minValue from comm_seq where seq_name=seqName ; select seq_value into nowValue from comm_seq where seq_name=seqName ;
if TRUNCATE(nowValue/(power(10,minValue)),0)=(date_format(argTime,'%Y%m%d%H%i%s')+0) then if mod(nowValue,power(10,minValue)) < power(10,maxValue) then
update comm_seq set seq_value=seq_value+1 where seq_name=seqName; else
update comm_seq set seq_value=TRUNCATE((date_format(now(),'%Y%m%d%H%i%s')+0),0)*power(10,minValue); end if;
else update comm_seq set seq_value=TRUNCATE((date_format(argTime,'%Y%m%d%H%i%s')+0),0)*power(10,minValue); end if; select seq_value into val from comm_seq where seq_name=seqName; commit;END;//
求帮忙提升。
delimiter //CREATE PROCEDURE sequence ( IN seqName varchar(30), IN argTime Date, OUT val BIGINT )BEGIN
declare maxValue int; declare nowValue bigint;
declare minValue int;
select * from comm_seq where seq_name=seqName for update; select max_value into maxValue from comm_seq where seq_name=seqName ; select min_value into minValue from comm_seq where seq_name=seqName ; select seq_value into nowValue from comm_seq where seq_name=seqName ;
if TRUNCATE(nowValue/(power(10,minValue)),0)=(date_format(argTime,'%Y%m%d%H%i%s')+0) then if mod(nowValue,power(10,minValue)) < power(10,maxValue) then
update comm_seq set seq_value=seq_value+1 where seq_name=seqName; else
update comm_seq set seq_value=TRUNCATE((date_format(now(),'%Y%m%d%H%i%s')+0),0)*power(10,minValue); end if;
else update comm_seq set seq_value=TRUNCATE((date_format(argTime,'%Y%m%d%H%i%s')+0),0)*power(10,minValue); end if; select seq_value into val from comm_seq where seq_name=seqName; commit;END;//
求帮忙提升。
解决方案 »
- 这条SQL有没优化余地
- mysql数据表太大 需要分表 怎么做最方便
- 表主键为自增属性的表的主键可否做外其他表的外键?
- mysql中的存储过程如何修改?
- 高分求postgressql电子书
- Mysql不支持存储过程,装innodb后多了transaction,但好像也没有procedure
- mysql 可以作为 winxp 的服务启动吗?
- 我做错了什么?我的phpmyadmin总说”数据库中没有数据表“ 左面明明有表
- 如何使用属性数固定的若干个表存放任意多个任意结构的二维表?
- mysql having字句中能对select中取别名的字段进行操作吗
- 关于 mysql安装后无法启动的问题
- java代码获取MY SQL存储过程out参数值
另外详细描述一下你所碰到的问题。
问题说明越详细,回答也会越准确!参见如何提问。(提问的智慧)
这句的update没什么用 去掉吧
列名 类型 默认值
seq_name varchar
seq_value int 0
min_value int 4(power(10,4)
max_value int 5(power(10,5)) 想用mysql的存储过程实现id的自增长 如201109131344561234 1234为自增的序列不想用mysql自带的自增 想自己写一个存储过程实现。我是一名实习生,不知道上面的意思。是真的需要这个算法,还是让我知难而退。我只是留恋我的程序。对老板已经有了猜疑。不知道这样下去还有没有意义。