首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > Mysql >

这个存储过程错在哪儿?

2012-09-06 
这个存储过程错在哪里??SQL codeCREATE PROCEDURE genid ()BEGIN DECLARE st VARCHAR(100)START TRANSACT

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

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


有一个专门生成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……

热点排行