模拟oracle序列生成的存储过程,帮忙看看哪没对,还有mysql workbench怎么调试存储过程。。。

卧槽这是我的昵称吗 2015-05-14 11:54:16
有张表sequence ,里面有2个字段,seq_name (varchar)和current_value (int)

CREATE PROCEDURE `NextSeqValue`(seqName VARCHAR(16), OUT nextVal int)
BEGIN
update sequence set current_value = current_value + 1 where seq_name = seqName;
select current_value into nextVal from sequence where seq_name = seqName;
END


我的想法是,传入一个seq_name ,将sequence表中current_value的值加1后返回

存储过程已经建起了,语法也通过了。
但是测试的时候发现,current_value 始终是NULL怎么回事。那句update语句也没起作用数据库的值没变。(seq_name这个参数值确认没写错,而且直接把那个update语句放在sql中执行是可以的)
...全文
489 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
ACMAIN_CHM 2015-05-15
  • 打赏
  • 举报
回复
update sequence set current_value = current_value + 1 where seq_name = seqName; 这个语句是否有问题,建议先测试一下这个语句。
道玄希言 2015-05-15
  • 打赏
  • 举报
回复
MYSQL 直接验证: CALL test('值', @nval); SELECT @nval;
道玄希言 2015-05-15
  • 打赏
  • 举报
回复
你的过程应该沒错的, 在第一个参数 seqName 前加上 IN 试试. 我模仿你的, 写了个, 只是在输入参数前加了 IN 标记.

DELIMITER $$
CREATE PROCEDURE `test`(IN seqName VARCHAR(16), OUT nextVal INT)
BEGIN
        UPDATE tmp SET id = id +1 WHERE C = seqName ; 
        SELECT id INTO nextVal FROM tmp WHERE C = seqName ;
END$$
DELIMITER ;
执行是成功的. 以下C#测试:


                MySqlConnection mysct = new MySqlConnection("连接串");
                mysct.Open();
                MySqlCommand myCommand = new MySqlCommand();
                myCommand.Connection = mysct;
                myCommand.CommandType = CommandType.StoredProcedure;
                myCommand.CommandText = "test";

                MySqlParameter p1 = new MySqlParameter("seqName", MySqlDbType.String);
                MySqlParameter p2 = new MySqlParameter("nextVal", MySqlDbType.Int32);
                p1.Direction = ParameterDirection.Input;
                p2.Direction = ParameterDirection.Output;
                p1.Value = "test";
                myCommand.Parameters.Add(p1);
                myCommand.Parameters.Add(p2);
                myCommand.ExecuteNonQuery();
                System.Console.WriteLine(p2.Value.ToString());
                mysct.Close();

56,677

社区成员

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

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