逻辑如下:
如用户名不存在,返回”用户名不存在”
如用户名存在,密码错误,返回”密码错误”
如用户名、密码都正确,但是级别不够,管理员是A,一般用户是U,那么返回”级别不够”
正常登录,返回”成功登陆”
我写了存储过程,在.NET中调用,存储过程编译通过,但是在程序使用时间是不能实现效果,请各位帮看下存储过程:
(调用界面就是用户名、密码,然后按登录按钮)
create or replace procedure PRC_STAT_LOGIN 
IS
  v_username users.username%TYPE;
  v_password USERS.PASSWORD%TYPE;
  v_userlevel USERS.USER_LEVEL%TYPE;begin
--声明游标  查询出每个每个用户的信息
  declare  cursor cursor_login is select * from users ;
   --cursor cursor_name is select username from users; 
  begin
    if not cursor_login%isopen then
       open cursor_login;
    end if;
     
    loop
      FETCH cursor_login INTO v_username,v_password,v_userlevel;  
      EXIT WHEN cursor_login%NOTFOUND;  
       --正常登录,返回”成功登陆”
      DBMS_OUTPUT.PUT_LINE('Login successfully!');
      IF v_username is NULL THEN--如用户名不存在,返回”用户名不存在”
        DBMS_OUTPUT.put_line('The user is not existed!');
      ELSE
        IF v_userlevel = 'U' THEN--如用户名、密码都正确,但是级别不够,管理员是A,一般用户是U,那么返回”级别不够”
          DBMS_OUTPUT.put_line('Low level!') ;   
        END IF;
      end if;
     end loop;
     
     exception
        when NO_DATA_FOUND THEN
          DBMS_OUTPUT.put_line('No data found!');
        when LOGIN_DENIED THEN  --如用户名存在,密码错误,返回”密码错误”
          DBMS_OUTPUT.PUT_LINE('PASSWORD ERROR');
      close cursor_login;   
   end;
end PRC_STAT_LOGIN;

解决方案 »

  1.   

    首先判断用户是否存在?如果用户都不存就不是判断密码是否对了
    所以可以不用游标
    select count(*) into num from users where username=xxx;
    如果num大于0再往下判断
      

  2.   

    为什么用游标呢?不理解,游标很慢的
    FUNCTION cfpath (v_username in varchar2,
      v_password in varchar2,
      v_userlevel in varchar2)
       RETURN VARCHAR2 IS 
    BEGIN 
      --声明游标  查询出每个每个用户的信息
      declare  cursor cursor_login is select * from users ;
       --cursor cursor_name is select username from users; 
      begin
        if not cursor_login%isopen then
           open cursor_login;
        end if;
         
        loop
          FETCH cursor_login INTO v_username,v_password,v_userlevel;  
          EXIT WHEN cursor_login%NOTFOUND;  
           --正常登录,返回”成功登陆”
          return 'Login successfully!';
          IF v_username is NULL THEN--如用户名不存在,返回”用户名不存在”
            return 'The user is not existed!';
          ELSE
            IF v_userlevel = 'U' THEN--如用户名、密码都正确,但是级别不够,管理员是A,一般用户是U,那么返回”级别不够”
              return 'Low level!';   
            END IF;
          end if;
         end loop;
         
         exception
            when NO_DATA_FOUND THEN
              return 'No data found!';
            when LOGIN_DENIED THEN  --如用户名存在,密码错误,返回”密码错误”
              return'PASSWORD ERROR';
          close cursor_login;   
       end;
    END;