当前位置: 代码迷 >> Oracle开发 >> mysql 存储过程调用有关问题
  详细解决方案

mysql 存储过程调用有关问题

热度:101   发布时间:2016-04-24 06:34:27.0
mysql 存储过程调用问题

-- --------------------------------------------------------------------------------
-- Routine DDL
-- Note: comments before and after the routine body will not be stored by the server
-- --------------------------------------------------------------------------------
DELIMITER $$

CREATE DEFINER=`test`@`%` PROCEDURE `Register`(uname varchar(20)
,upwd varchar(20)
,out Ret int)
xxx:BEGIN

/*
 * 0:注册成功
 * 1:用户名已经存在
 * 2:注册失败
 */

declare rv int;
declare cnt int;

select count(*) as rv from user where username = uname;

if rv > 0 then
set ret = 1;
leave xxx;
else
insert into user (username, userpwd) values(uname, upwd);
select row_count() as cnt;

if cnt = 1 then
set ret = 0;
else
set ret = 2;
end if;
end if;



END


以上是我的存储过程。

我用
call register('xiao yu', '123456', @ret)
来调用,
---
每调用一次,就插入一次,这是为什么啊,我实在搞不懂,求解。
或许可能是select count(*) as rv from user where username = uname;
这一句导致的,我的另一个存储过程也存在这样的问题,就是这个
select给rv的值为0 ,哪怕我这么写:select rv=count()..
我不明白为什么会这样,我把这句单独执行的时候就是正常的。
---
还有个问题就是我百度看了些教程不都是可以直接select count(*) as cnt...
这样用的吗,为什么我不能这么用,假如注释:
-- declare rv int;
-- declare cnt int;
这2行,则再次call的时候,就提示:
17:03:25 call register('xiao yu', '123456', @ret) Error Code: 1054 Unknown column 'rv' in 'field list'
为什么?
---
要被这个mysql的这些问题折磨疯了...
在 sql server 上看个分分钟的例子老早要做的事情都做好了...
---
求解,谢谢!!

------解决思路----------------------
select count(*) INTO rv from user where username = uname;

ORACLE 的语法是select into
------解决思路----------------------
1、-- declare rv int;
-- declare cnt int;
这两行把前面的declare去掉

declare 需要和begin end;配套使用的
2、参数列表后增加 is关键字

建议先看看oracle的语法
------解决思路----------------------
mysql?刚发现,怎么发到oracle区来了
  相关解决方案