这个存储过程如何写?

zxjcool 2005-12-07 05:10:06
中文部分表示要输写的部分:

第一问如下:
CREATE OR REPLACE PROCEDURE TEST (username
varchar2,passwords varchar2,result out number) as
begin
result:='1';
select username into result from TEST where username=username and password=passwords;
--如果没有查询到数据,则result:=0
--如果产生异常,则result:=2
commit;
end;


第二问如下:
CREATE OR REPLACE PROCEDURE TEST (username
varchar2,passwords varchar2,result out number) as
begin
result:='1';
update TEST set username=username,password=passwords --此处也可是是插入的sql语句
--操作失败,则result:=0, 插入时,回滚记录
--产生异常,则result:=2 ,插入时,回滚记录
commit;
end;



以上两问,代表我的基本意思,也就是判断是否查询到记示,或是否操作表成功,不知各位大哥,还有没有更好的方法?
...全文
91 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
zxjcool 2005-12-07
  • 打赏
  • 举报
回复

select count(*) into result from bbsuser where passwords=passwords and username=username;

我数据表中有三条记录,在存储过程中执行上面的语句,无论条件是什么,返回的记录总是 3 ,这是怎么回事呢?条件好像不起作用啊

CREATE OR REPLACE PROCEDURE TEST (username
varchar2,passwords varchar2,result out number) as

a varchar2(20);
begin

select count(*) into result from bbsuser where passwords=passwords and username=username;


end;

超叔csdn 2005-12-07
  • 打赏
  • 举报
回复
第二个如果可能应该是:
EXCEPTION
WHEN OTHERS THEN
ROLLBACK;
超叔csdn 2005-12-07
  • 打赏
  • 举报
回复
EXCEPTION
WHEN NO_DATA_FOUND THEN
result:='0';
WHEN OTHERS THEN
result:='2';
超叔csdn 2005-12-07
  • 打赏
  • 举报
回复
不会啊,这个条件应该有作用的啊,看你传什么参数进去,它就按什么条件执行啊!

EXCEPTION
WHEN NO_DATA_FOUND
result:='0';
WHEN OTHERS
result:='2';
zxjcool 2005-12-07
  • 打赏
  • 举报
回复
为什么"where username=username and password=passwords;"

这个条件在存储过程中不起作用?
zxjcool 2005-12-07
  • 打赏
  • 举报
回复
是的,望指点一下
超叔csdn 2005-12-07
  • 打赏
  • 举报
回复
如果没有查询到记录,就直接发生异常了.建议用SELECT COUNT(*) INTO ......
用记录条数来判断.

你是对EXCEPTIONS处理不熟吗?

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧