当前位置: 首页 > 面试题库 >

Sybase中的错误处理

康文昌
2023-03-14
问题内容

有没有一种方法来处理错误SYBASE,比如TRY-CATCH,你可以在使用块MS SQL ServerOracle等等?

我已经在网上搜索过,发现的唯一选择是global变量@@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


 类似资料:
  • 我们在sybase ASE15.0中得到错误605 服务器错误: 605,严重性: 21,状态: 1 server试图从缓存“默认数据缓存”中提取逻辑页“64000”。页面属于数据库“testdb”(30)、对象“”(0)、索引“”(1)、分区“”(1836412015),而不属于数据库“testdb”(30”、对象“(99)、索引(0)和分区“””(99)。 我们如何修复上述错误?

  • 问题内容: 解析器不知道要做什么时的默认行为是将消息打印到终端,例如: 第1:23行在“}”处缺少DECIMAL 这是一个很好的信息,但是在错误的位置。我宁愿将此作为例外。 我尝试使用,但是会抛出一个没有消息的消息(由引起,也没有消息)。 有什么办法可以让我通过异常报告错误,同时又保留消息中的有用信息? 这就是我真正想要的—我通常在规则中使用动作来构建对象: 然后,当我调用解析器时,我将执行以下操

  • 问题内容: 我有一系列要解决的承诺 我继续继续诺言链。看起来像这样 我想添加一个catch语句来处理单个promise,以防万一出错,但是当我尝试时,返回它发现的第一个错误(忽略其余的),然后我无法从其余的promise中获取数据数组(没有错误)。 我尝试做类似.. 但这并不能解决。 谢谢! - 编辑: 下面的答案完全正确,但代码由于其他原因而中断。如果有人感兴趣,这就是我最终得到的解决方案… 节

  • 问题内容: jQuery的getScript函数似乎不支持错误回调函数。我不能在这里使用全局ajax错误处理代码,局部错误功能将是理想的选择。 回调获取data / textStatus的文档似乎不正确-回调均不获取。 关于如何检测到对getScript的调用失败的任何建议(例如,服务器不可用)? 编辑:仅查看源代码,似乎回调仅在成功时才调用,数据始终设置为null且未定义textStatus(因

  • Ansible 通常默认会确保检测模块和命令的返回码并且会快速失败 – 专注于一个错误除非你另作打算. 有时一条命令会返回 0 但那不是报错.有时命令不会总是报告它 ‘改变’ 了远程系统.本章节描述了 如何将 Ansible 处理输出结果和错误处理的默认行为改变成你想要的. 忽略错误的命令 New in version 0.6. 通常情况下, 当出现失败时 Ansible 会停止在宿主机上执行.有

  • 问题内容: 我正在使用Restify和Mongoose创建一个API ,而这两个都是我的新手。我似乎无法找出正确的方法来处理Mongoose / Node中的错误。 到目前为止,我正在尝试执行以下操作: 我正在尝试为此调用GET(针对不存在的用户)。而不是发送回简单的错误消息,而是导致整个节点应用程序失败。我对return next(err)的用户以及应该怎么做感到困惑。 任何帮助是极大的赞赏。