sybase中的事务控制 及 如何设置sql执行的超时时间?

luopowusheng 2009-05-04 03:22:54
小弟接触sybase不久,有很多东西不明白
下面是我写的存储过程的一段:
begin transaction
insert into Wap_KPI ……--在此会有数值越界的错误产生,存储过程直接终止了
print @@error --这条语句没有执行
if(@@error <> 0)
begin
rollback transaction
end
commit transaction

我有两个问题请教各位高手:
1、sybase中事务如何控制?我写的有什么问题吗?

2、我想设置此insert语句的超时时间,比如两分钟,如果时间到就结束此操作,回滚;
如何实现?

...全文
326 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
wwwwb 2009-05-05
  • 打赏
  • 举报
回复
原来在相关表中有TRIGGER,去掉就OK了,可以捕获相关错误。
wwwwb 2009-05-05
  • 打赏
  • 举报
回复
上述代码在SQL ANYWHERE11下测试通过,查查ASE语法,是否支持exception ,
现在正在搜索如果违反唯一约束时,弹出出错信息
luopowusheng 2009-05-04
  • 打赏
  • 举报
回复
继续期待楼下高见!!
luopowusheng 2009-05-04
  • 打赏
  • 举报
回复
我刚接触sybase不久,楼上的几个语句不太明白
sybase中有MESSAGE 关键字吗?MESSAGE @@SQLSTATUS TYPE INFO TO CLIENT 这句什么意思?好像编译不通过噢?

在网上找到一篇文章如下说到:
1、在sybase12.5.2的procedure中无法进行异常捕获,Sybase没有办法进行异常处理,而且procedure中的任何错误,会导致整个procedure直接退出
2、@@error 的用法不正确,在事务中要使用局部变量保存@@error,再作处理!
看来这是条死胡同了
WWWWA 2009-05-04
  • 打赏
  • 举报
回复
简单示例:
ALTER PROCEDURE "zz"."TRAN1"( /* [IN | OUT | INOUT] 参数名称 参数类型 [DEFAULT 缺省值], ... */ )
/* RESULT( 列名 列类型, ... ) */
BEGIN
declare @errormsg varchar(32767);

insert into qw values (1,'1',1,4);
MESSAGE @@SQLSTATUS TYPE INFO TO CLIENT ;
commit ;
exception
when OTHERS then
set @errormsg=errormsg();
rollback;

MESSAGE string('123',@errormsg) TYPE INFO TO CLIENT ;


END
luopowusheng 2009-05-04
  • 打赏
  • 举报
回复
谢谢楼上
不过你说的这个方法没有解决问题
因为当错误发生时sql就直接终止了
后面的根本就没有执行,@@transtate 的值是多少也就没有意义了~~
那如何才能如oracle那样将异常或者错误直接捕获处理呢?
WWWWA 2009-05-04
  • 打赏
  • 举报
回复
Begin transaction
insert into Wap_KPI
select @@transtate
commit transaction


@@transtate可包含下列值:
值意 义
0事务进行中:一个显式或隐式事务有效;上一语句执行成功
1事务完成:事务完成并提交其变化
2语句异常中止:上一语句异常终止;对事务无影响
3事务异常中止:事务异常中止并回退所有变化
luopowusheng 2009-05-04
  • 打赏
  • 举报
回复
自己先顶一下
期待高手指点!!

2,596

社区成员

发帖
与我相关
我的任务
社区描述
Sybase相关技术讨论区
社区管理员
  • Sybase社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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