keleiwei 发表于 2011-8-22 16:04:05

我写的oracle中的一个存储过程,请高手帮忙看看问题出在哪。

题目是这样的:
创建一个存储过程,存储过程名为p_login,用于操作用户登录的校验,登录需要使用EMPNO和EMPPASS,并需要提示登录中的错误,如是EMPNO不存在,还是EMPNO存在EMPPASS错误,还是其他错误等。
要求:
1)不同的输出状态用不同的输出编号标识(out_code)如EMPNO存在且密码正确out_code=0,EMPNO不存在此类错误的out_code=1,用户名存在密码错误out_code=2,其他错误out_code=3
    2)不同的输出状态对应不同的输出描述或提示,输出描述用out_desc标识
3)存储过程运行结束要把输出状态对应的输出标识(out_code)和输出描述(out_desc)输出。

以下是我写的脚本:
create or replace procedure p_login ( NO IN number, PASS IN nvarchar2, out_code OUTnumber, out_desc OUT nvarchar2)
is
count1 number(10);
vcount number(10);
other EXCEPTION;
begin
select ID into count1 from EMP where EMPNO= NO;
select ID into vcount from EMP where EMPPASS= PASS and EMP.ID = count1;
if (count1 is not null and vcount is not null) then
         out_code:=0;
         out_desc:= '登录成功';
elsif (count1 is Null and vcount is Null) then
         out_code:=1;
         out_desc:= 'EMPNO不存在';
elsif (count1 is not Null and vcount is Null) then
         out_code:=2;
         out_desc:= '密码错误';
else out_code:=3;
   out_desc:= '其他错误';
end if;
dbms_output.put_line(out_code||out_desc);
end p_login;

运行的时候会有错。主要原因是:在oracle中,只要某个参数为空的话 那么系统就报错了。。。这种情况应该怎么处理呢?貌似用IS NULL没用啊?

shimltester 发表于 2011-8-24 15:08:31

学习中…………:victory:

阳光下的橙子 发表于 2011-8-25 10:18:14

null和Empty不是一码事吧

shrrak 发表于 2011-8-25 11:05:50

用raise试试
页: [1]
查看完整版本: 我写的oracle中的一个存储过程,请高手帮忙看看问题出在哪。