gpt4 book ai didi

sql - Sybase 中的错误处理

转载 作者:行者123 更新时间:2023-12-04 14:05:38 26 4
gpt4 key购买 nike

有没有办法处理 SYBASE 中的错误? ,例如 TRY-CATCH您可以在 MS SQL Server 中使用的块, Oracle , 等等?

我在网上搜索过,发现的唯一选项是全局变量 @@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

关于sql - Sybase 中的错误处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12808846/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com