存储过程 急 在线等

dk9761 2007-01-17 11:53:33
问大家个oracle 存储过程的事情。。。 我在一个存储过程里
写了这样一条语句
update vehicle_main set tolltodate=v_NewTime where vehicleid=v_vehicleid;
if sql%notfound then
raise exception_cannotExec;
end if;
.....
commit;
EXCEPTION
WHEN OTHERS THEN
BEGIN
INTRESULT:=0;
ROLLBACK;
END;

v_NewTime(date) 和v_vehicleid (int) 都是变量
exception_cannotExec; 自定义异常
执行的时候这两个值都是正确的。。。
但是 有的时候看结果这个语句就是没有执行。。。。。
也不报异常。。。
下面的语句都执行成功了
但重新执行一边又好了。。。。
...全文
272 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
dk9761 2007-01-17
  • 打赏
  • 举报
回复
这个 我也用过。。。。 不过他不会走到这一步。。。不会走到 Exception 因为在前边没有抛出过异常
dk9761 2007-01-17
  • 打赏
  • 举报
回复
他不会抛出异常。。。。。 中间那条语句 从结果上来看 没有执行成功。。。。
然后 我又重新执行一边。。。他又好了
dk9761 2007-01-17
  • 打赏
  • 举报
回复
我的意思是 他可以正常执行。。。但是。。。 中间那条语句 从结果上来看 没有执行成功。。。。
tgm78 2007-01-17
  • 打赏
  • 举报
回复
EXCEPTION
WHEN OTHERS THEN
BEGIN
INTRESULT:=0;
ROLLBACK;
dbms_output.put_line('遇到未知错误!!');
END;
dk9761 2007-01-17
  • 打赏
  • 举报
回复
阿。。。全贴出来太大了
tgm78 2007-01-17
  • 打赏
  • 举报
回复
但是 有的时候看结果这个语句就是没有执行。。。。。
也不报异常。。。

EXCEPTION
WHEN OTHERS THEN
BEGIN
INTRESULT:=0;
ROLLBACK;
lz
你的最外层的异常处理是rollback啊,而且不提示。所以:
就是你看到的情况拉
Paladin_china 2007-01-17
  • 打赏
  • 举报
回复
能全部贴出来吗?
zgh2003 2007-01-17
  • 打赏
  • 举报
回复
更新的表应该没有问题.如果表vehicle_main中where vehicleid=v_vehicleid至少能查出一条记录来,后面的异常都不会发生,所以exception对update操作基本没用.最好在update之前对所要取的值进行判断,如果不符合条件,就回滚或返回.当然第一个异常还是有用的.
dk9761 2007-01-17
  • 打赏
  • 举报
回复
恩。。。 他是不会抱错的~~ 其中一条语句执行不成功的话。。那么这个过程就会返回一个值 代表过程执行不成功。。 但是每次返回的结果都是成功的。。 我觉得是更新的那个表是不是有些问题。。。 大家遇到过这些问题没??
zgh2003 2007-01-17
  • 打赏
  • 举报
回复
如果update可以取到记录,但set值是空时,是不会报错的,空值也会被认为正确赋值,除非表有约束,不允许set字段为空,这时也就会报错.
icedut 2007-01-17
  • 打赏
  • 举报
回复
--lz好好检查一下吧

DECLARE aa INT;
exc_1 EXCEPTION;
BEGIN
aa:=1;
IF aa=1 THEN
RAISE exc_1;
END IF;
aa:=2;
IF aa=1 THEN
RAISE exc_1;
END IF;
COMMIT;
EXCEPTION
WHEN exc_1 THEN
DBMS_OUTPUT.PUT_LINE('1');
aa:=2;
DBMS_OUTPUT.PUT_LINE(aa);
ROLLBACK;
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('other');
ROLLBACK;
END;

--
结果
1
2
dk9761 2007-01-17
  • 打赏
  • 举报
回复
好像不会。。。我都检查了。。。。 从结果上看 其他几个地方都对的。。。
icedut 2007-01-17
  • 打赏
  • 举报
回复
dk9761(King) ( ) 信誉:100 Blog 2007-01-17 12:06:01 得分: 0


这个 我也用过。。。。 不过他不会走到这一步。。。不会走到 Exception 因为在前边没有抛出过异常


--
是否是别的地方的问题啊
icedut 2007-01-17
  • 打赏
  • 举报
回复
DECLARE aa INT;
exc_1 EXCEPTION;
BEGIN
aa:=1;
IF aa=1 THEN
RAISE exc_1;
END IF;
aa:=2;
IF aa=1 THEN
RAISE exc_1;
END IF;
COMMIT;
EXCEPTION
WHEN exc_1 THEN
DBMS_OUTPUT.PUT_LINE('1');

WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('other');
ROLLBACK;
END;

--
结果
1

17,377

社区成员

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

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