比如一段事务
BEGIN TRANSACTION DeleteSupv
--SQL语句
IF @@error<>0
BEGIN
ROLLBACK TRAN DeleteSupv
GOTO on_error
END
--SQL语句
IF @@error<>0
BEGIN
ROLLBACK TRAN DeleteSupv
GOTO on_error
END
COMMIT TRAN DeleteSupvRETURN 1
on_error:
print 'Error occured'
当事务发生错误回滚时,有办法知道 是执行那一段SQL出错的吗 oracle和sql server中如何做到如果可以 那程序当中 用什么对象(connection,statement,resultset?) 如何获取到上面DB获取的 是执行那一段 SQL出错的位置呢
BEGIN TRANSACTION DeleteSupv
--SQL语句
IF @@error<>0
BEGIN
ROLLBACK TRAN DeleteSupv
GOTO on_error
END
--SQL语句
IF @@error<>0
BEGIN
ROLLBACK TRAN DeleteSupv
GOTO on_error
END
COMMIT TRAN DeleteSupvRETURN 1
on_error:
print 'Error occured'
当事务发生错误回滚时,有办法知道 是执行那一段SQL出错的吗 oracle和sql server中如何做到如果可以 那程序当中 用什么对象(connection,statement,resultset?) 如何获取到上面DB获取的 是执行那一段 SQL出错的位置呢
在oralce的alert日志里面有记载的。
比方说我一个事务分3步,第二步报错了,控制台oracle会报一个错,我自己调试知道,但是我现在要把这个错误信息包装一下,然后告诉用户,你操作的第二步时发生错误,程式里面只能看见保存的信息,并不能判断是第几步报错啊
不错,自己可以抛出异常出来,但是这样的话,你自己需要先知道是哪些sql出的问题,才能在异常里面显示出来啊!
如果oracle的存储过程报错,如果是java的话,获取exception,里面都会记录是哪个存储过程报错的,在哪行报错,然后ora错误是什么,都会有的。
呵呵,大菜鸟路过,据我所知,java里面的exception完全可以达到你的要求。
照你这么说,ora那么多错误,比如ora-0001 ora-0002.....ora-99999 我都判断下呢? 直接报的异常我调试是能看明白,但我程式怎么封装?比如报了个主键冲突,如果我三步都是插入语句,能判断是哪一句发生的主键冲突吗?请注意,调试时我自己能看明白,但是控制台打印出那么多语句,我怎么分类,还有,根本就没用存储过程