• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

这个存储过程错在哪儿?

mysql 搞代码 7年前 (2018-06-05) 153次浏览 已收录 0个评论

这个存储过程错在哪里??

SQL code

  CREATE PROCEDURE genid () BEGIN   DECLARE st VARCHAR(100);   START TRANSACTION;          IF NOT EXISTS (SELECT 1 FROM order_key) THEN         SET @sqlstr=CONCAT('insert into order_key select substring(`key`,8) from order', DATE_FORMAT(CURDATE(), '%Y%m'), ' order by id desc limit 1');         PREPARE st FROM @sqlstr;         EXECUTE st;     ELSE              UPDATE order_key SET id=id+1;     END IF;     SELECT id FROM order_key;     COMMIT; END  

欢迎大家阅读《这个存储过程错在哪儿?》,跪求各位点评,by 搞代码

有一个专门生成id的表order_key
初始化的时候是从order201208 就是order+当前月中取key字段的中8个以后的数字 插入表order_key中

order201208
id key data
1 x2012081 ds
2 x2012082 24 
3 x2012083 14

也就是说现在取到的是3 3会被插入到order_key的id字段中。然后被跟新为4

上面的存储过程我执行的时候有问题,苦于找不到问题来求助!

——解决方案——————–
delimiter //
CREATE PROCEDURE genid ()
BEGIN 

DECLARE st VARCHAR(100);
START TRANSACTION;

IF NOT EXISTS (SELECT 1 FROM order_key) THEN
SET @sqlstr=CONCAT(‘insert into order_key select substring(`key`,8) from order’, DATE_FORMAT(CURDATE(), ‘%Y%m’), ‘ order by id desc limit 1’);
PREPARE st FROM @sqlstr;
EXECUTE st;
ELSE
UPDATE order_key SET id=id+1;
END IF;
SELECT id FROM order_key;
COMMIT;
END
//
——解决方案——————–

探讨

引用:

引用:

delimiter //
CREATE PROCEDURE genid ()
BEGIN

DECLARE st VARCHAR(100);
START TRANSACTION;

IF NOT EXISTS (SELECT 1 FROM order_key) THEN
SET @sqlstr=CONCAT(‘insert……


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:这个存储过程错在哪儿?

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址