有没有一种方法来处理错误SYBASE,比如TRY-CATCH,你可以在使用块MS SQL Server,Oracle等等?
SYBASE
TRY-CATCH
MS SQL Server
Oracle
我已经在网上搜索过,发现的唯一选择是global变量@@error,但是它没有按我预期的那样工作,例如,以下代码:
@@error
begin tran update table1 set name = 'new name' where name = 'old name' update table2 set id = 1 where id = 30 -- suppose id has a unique constraint and there's already a row with id = 1 IF @@error = 0 begin print 'commited' commit end else begin print 'rolled back' rollback end
确实会以某种方式回滚,因为我在table1上更改的名称保留了我在此处进行测试时的旧值,但是它不会打印消息,也不会执行我在导致错误的指令之后放置的任何指令
有人可以帮我吗?您知道Sybase错误处理是如何工作的吗?
第一种解决方案。
您无法以这种方式在Sybase上捕获异常。在更新之前,您必须检查数据:
if not exists ( select 1 from table2 where id = 1 ) begin update table2 set id = 1 where id = 30 end else begin print 'rolled back' rollback end
第二解决方案。
您还可以在过程中添加更新命令,然后可以捕获异常。创建过程:
create procedure myproc as begin update table2 set id = 1 where id = 30 end
并如下运行:
begin tran update table1 set name = 'new name' where name = 'old name' exec myproc IF @@error = 0 begin print 'commited' commit end else begin print 'rolled back' rollback end