互联网服务数据库sqlcode

存储过程中返回sqlcode sqlstate 的问题

set stmt = ' update zy.temp2  set c2= '||c1.name||' where   c1 = '||c1.id ;
prepare prestmt from stmt;
execute prestmt;
set v_msg='SQL_CODE:'||char( sqlcode)||'SQL_STATE:'||char( sqlstate);


如果execute prestmt 执行成功v_msg 返回值是SQL_CODE:0          SQL_STATE:00000
执行错误也是SQL_CODE:0          SQL_STATE:00000 

我在测试环境中测试,如果执行错误会返回错误sqlcode,sqlstate 
我测试环境版本是8.1 生产环境是9.5 难道9.5使用上还有其它语法吗?
参与15

15同行回答

foryulingforyuling系统架构师skyon
我在v8中,都可以捕获,应该在语句上和逻辑上没有问题,我就是相同的存储过程,在v9.5中怎么也捕获不了。显示全部
我在v8中,都可以捕获,应该在语句上和逻辑上没有问题,我就是相同的存储过程,在v9.5中怎么也捕获不了。收起
互联网服务 · 2009-04-17
浏览999
leo 和 Felix 说得没错。如果你定义的是 CONTINUE 类型的句柄,那么应该立即捕获 SQLCODE,否则其他语句一执行,SQLCODE就会发生变化了显示全部
leo 和 Felix 说得没错。如果你定义的是 CONTINUE 类型的句柄,那么应该立即捕获 SQLCODE,否则其他语句一执行,SQLCODE就会发生变化了收起
2009-04-17
浏览977
FelixFelix数据仓库工程师亚信联创科技(北京)有限公司
我在9.1中也是像pengjj兄那么做的,可以正常捕获sqlcode和sqlstate,没听说9.5有这方面的修改。foryuling定义continue的话,注意一下插入sqlcode语句的位置,如果不是在异常发生点捕获后立即执行插入,而后续有成功语句执行后,再插入表,则sqlcode已经变为0了。...显示全部
我在9.1中也是像pengjj兄那么做的,可以正常捕获sqlcode和sqlstate,没听说9.5有这方面的修改。foryuling定义continue的话,注意一下插入sqlcode语句的位置,如果不是在异常发生点捕获后立即执行插入,而后续有成功语句执行后,再插入表,则sqlcode已经变为0了。收起
软件开发 · 2009-04-16
浏览999
foryulingforyuling系统架构师skyon
应该不会,因为我在执行后,把sqlcode,sqlstate插入到一张表里的。显示全部
应该不会,因为我在执行后,把sqlcode,sqlstate插入到一张表里的。收起
互联网服务 · 2009-04-15
浏览986
leo_wynleo_wyn商业智能工程师Security
你没有保存发生错误"点"sqlcode,continue捕获完成后程序继续运行的结果sqlcode=0显示全部
你没有保存发生错误"点"sqlcode,continue捕获完成后程序继续运行的结果sqlcode=0收起
系统集成 · 2009-04-15
浏览976
foryulingforyuling系统架构师skyon
我程序中的sql 我是故意写错误的。所以返回值应该是错误代码!显示全部
我程序中的sql 我是故意写错误的。所以返回值应该是错误代码!收起
互联网服务 · 2009-04-15
浏览1100
leo_wynleo_wyn商业智能工程师Security
v9 版本和 v8的错误处理基本相同, 你的语法在v9中也适用显示全部
v9 版本和 v8的错误处理基本相同, 你的语法在v9中也适用收起
系统集成 · 2009-04-15
浏览1091
leo_wynleo_wyn商业智能工程师Security
declare continue handler for sqlexception ,sqlwarning, not found 由于错误句柄使用 "continue", 当"sqlexception ,sqlwarning, not found" 发生时, 先执行错误捕获代码(declare continue 定义的), 然后继续执行 "sqlexception ,sqlwarning, not found" 发生的代码的...显示全部
declare continue handler for sqlexception ,sqlwarning, not found

由于错误句柄使用 "continue", 当"sqlexception ,sqlwarning, not found" 发生时,
先执行错误捕获代码(declare continue 定义的), 然后继续执行 "sqlexception ,sqlwarning, not found" 发生的代码的后面的程序, 如果程序运行成功, sqlcode 仍然为0;收起
系统集成 · 2009-04-15
浏览1083
foryulingforyuling系统架构师skyon
捕获句柄的时候,我用的是:declare continue handler for sqlexception ,sqlwarning,not found显示全部
捕获句柄的时候,我用的是:declare continue handler for sqlexception ,sqlwarning,not found收起
互联网服务 · 2009-04-15
浏览1078
原帖由 foryuling 于 2009-4-15 10:05 发表 做为参数传出来,也是SQL_CODE:0          SQL_STATE:00000但我里面的sql 是我故意写错的!应该返回错误的值呀我在v8 里面怎样写都正确,在v9.5里面相同的存储过程,怎样都不行。难道是版本的问题。 .....显示全部
原帖由 foryuling 于 2009-4-15 10:05 发表


做为参数传出来,也是SQL_CODE:0          SQL_STATE:00000但我里面的sql 是我故意写错的!应该返回错误的值呀
我在v8 里面怎样写都正确,在v9.5里面相同的存储过程,怎样都不行。难道是版本的问题。 ...
补充两点:
1、定义捕获句柄的时候也可以定义为 CONTINUE 类型的,看你的逻辑具体实现而定;
2、我们在v8的生产环境下这样使用是没有问题的,但v9没有试过。你可以试试,然后把经验分享一下。收起
2009-04-15
浏览1133

提问者

foryuling
系统架构师skyon
擅长领域: 数据库Linux服务器

相关问题

相关资料

相关文章

问题状态

  • 发布时间:2009-04-14
  • 关注会员:0 人
  • 问题浏览:13848
  • 最近回答:2009-04-17
  • X社区推广