菜鸟求助MySQL简单存储过程

Harrison_2009 2016-09-12 04:07:45
假定我需要查指定表的最大ID+1,MS SQL如下:
if IsNull(@prefix,'') = ''
Select Right('00000000',Max(FieldName)+1),5) From TableA
else
另一种处理方式。

其中@Prefix,FieldName,TableA为用户输入参数,需要判断@prefix是否为空或不填,进行不同的查询。

求转换成MySQL的存储过程。
万分感谢!


...全文
133 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Harrison_2009 2016-09-13
  • 打赏
  • 举报
回复
BEGIN DECLARE _err varchar(20); declare exit handler for sqlexception, sqlwarning, not found set _err='error'; Set @Prefix = Prefix;#前缀 Set @TableName = TableName;#表名 Set @FieldName = FieldName;#列名 Set @Digits = Digits;#保留流水长度 Declare @rule Varchar(500); IF ISNULL(@Prefix) || LENGTH(@Prefix) < 1 THEN Set @rule = CONCAT('Max(',@FieldName,')+1,'); ELSE Set @rule =CONCAT('Right(Max(',@FieldName,'),LENGTH(Max(',@FieldName,'))-LENGTH(',@Prefix,')))+1,'); End If; Set @strSql = CONCAT('Select Right(concat(''00000000000000000000'',',@rule,@Digits,') Into @MaxID',' From ',@TableName); PREPARE s1 FROM @strSql; EXECUTE s1; DEALLOCATE PREPARE s1; SET MaxID = @MaxID; END 参数: IN Prefix varchar(20),IN TableName varchar(50),IN FieldName varchar(50),IN Digits tinyint,OUT MaxID varchar(50) 保存时报错:
Harrison_2009 2016-09-13
  • 打赏
  • 举报
回复
问题已解决,Declare那有问题,还有字段与表名 要用``引起来。
ACMAIN_CHM 2016-09-13
  • 打赏
  • 举报
回复
尝试使用 MYSQL自带的 命令行客户端,使用如下语法 delimiter // create procedure ... being end // delimiter ;
ACMAIN_CHM 2016-09-12
  • 打赏
  • 举报
回复
建议参考MYSQL官方免费手册中的存储过程说明和例子,先亲自写一下,然后有什么问题可以把自己写的代码和错误信息一同贴出大一起分析讨论。

56,687

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧