-- --------------------------------------------------------------------------------
-- 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区来了