日期:2014-05-17  浏览次数:20854 次

关于oracle里游标的问题!急!
--存储过程
--用游标的不行
create   or   replace   procedure   user_login
(
v_nickname   varchar2,
v_pwd   varchar2
)
is
cursor   login   is   select   *   from   users   where   nickname   =   v_nickname   and   pwd   =   v_pwd;
begin
open   login;
dbms_output.put_line(v_nickname);
dbms_output.put_line(v_pwd);
if   login%rowcount   >   0   then
dbms_output.put_line(v_nickname|| '欢迎你再次光临本网站! ');
else
dbms_output.put_line( '用户 '||v_nickname|| '不存在或密码错误! ');
end   if;
close   login;
end;
--定义v-count参数判断可以
create   or   replace   procedure   user_login
(
v_nickname   varchar2,
v_pwd   varchar2
)
is
v_count   number(4);
begin
select   count(*)     into   v_count   from   users   where   nickname   =   v_nickname   and   pwd   =   v_pwd;      
if   v_count> 0   then  
dbms_output.put_line(v_nickname|| '欢迎你再次光临本网站! ');
else
dbms_output.put_line( '用户 '||v_nickname|| '不存在或密码错误! ');
end   if;end;
为何   我用游标的不可以
dbms_output.put_line(v_nickname);
dbms_output.put_line(v_pwd);
可以输出这2个参数的值
但是cursor   login   is   select   *   from   users   where   nickname   =   v_nickname   and   pwd   =   v_pwd;
这2个参数好象没带进这个游标   这是什么原因哦?

------解决方案--------------------
你的要求没有必要用游标,用第二个存储过程就可以了

如果用游标你可以参考这个
http://community.csdn.net/Expert/TopicView3.asp?id=5453585
------解决方案--------------------
declare
type cursor_type is ref cursor;
s cursor_type;
begin
open s for select * from users where nickname = v_nickname and pwd = v_pwd;
.....你的判断
close s;
end;