NTier体系结构解决方案(二)
发布时间:2010/11/24 16:23:30 来源:www.xue.net 编辑:城市总裁吧
上面的这个Procedure中定义了一个中间的变量tmp_pass,使用这个中间变量来保存第一个Select into语句选出的数据库中的旧有密码,然后用它和用户的输入做比较,如果是正确的就执行更新的过程,否则返回一个用于判断的过程值。为什么要用Select into呢?这是因为在Procedure中不支持选出一个记录集,而Select into其实是一个隐含的Cursor,所以我们还可以这样来实现刚才的这个Procedure:
Create or Replace Procedure proc_pass_change
( member_id in varchar2,
org_pass in varchar2,
new_pass in varchar2,
status out number ‘status是一个标志量,当为0时表示成功,1代表旧密码不符,其它的值代表过程出错。
)is
Cursor csr_pass is
Select mem_pass from personal_beadroll
Where mem_id=member_id and mem_pass=org_pass;
begin
open csr_pass;
if csr_pass%FOUND then
update mem_pass=new_pass from personal_beadroll
where mem_id=member_id;
status:=0;
else
status:=1;
end if;
commit;
close csr_pass;
exception
when others then
rollback;
status:=2;
raise;
end;
它的实现思想是,首先我们产生一个密码和ID都符合的记录集,若这个记录集存在的话,就证明了该用户输入的原始密码有效,此时csr_pass%FOUND条件为真,于是我们就可以进行密码的更新工作了。
从上面的例子我们可以看到,当我们的事务是复杂的SQL语句时,我们使用Procedure的优越性是明显的。