• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase
您的位置:首页 > 数据库 >DB2 > 如何在SQL存储过程中处理错误

如何在SQL存储过程中处理错误

作者:匿名 字体:[增加 减小] 来源:互联网 时间:2017-06-28

匿名通过本文主要向大家介绍了sql存储过程教程,sql存储过程,sql存储过程实例,sql存储过程学习,sql server 存储过程等相关知识,希望本文的分享对您有所帮助
</div>
如何在SQL存储过程中处理错误

下面将如何在存储过程中判断SQL语句的错误,向大家作一个详细地介绍, 希望大家让程序开发人员遵从这样的方式编写SQL存储过程,以避免造成在程序联调过程中应用程序状态不明确的问题。

如以下代码表示,在SQL存储过程中可以定义执行状态的出口参数,而且尽量返回系统报告的SQLCODE, 而并非个人定义的,这样可以更好地判断是什么样的错误, 也可以返回错误说明,有的开发人员不知何故,将返回码定义成79700,如果是参照DB2说明开发的,可能是误会了说明的含义,这个问题已经造成了联调过程中的误导判断和无法确定问题的原因,希望大家注意;

如果需要忽略NOT FOUND, 可以DECLARE CONTINUE HANDLER FOR NOT FOUND, 如果需要并且可以将returnCode设置为零,以便于在程序体内判断returnCode的时候可以忽略这个NOT FOUND;

可以定义DECLARE EXIT HANDLER FOR SQLEXCEPTION, 当出现SQL错误的时候,中断程序执行过程,跳出存储过程,也可以定义DECLARE CONTINUE HANDLER FOR SQLEXCEPTION, 同时判断SQLCODE的值,用以忽略你希望忽略的error code, 在程式的最后列出了这种使用方式:

CREATE PROCEDURE OUT_LANGUAGE (...,OUT returnCode INTEGER, OUT returnMsg CHAR(32))
-- returnCode 返回执行中的的错误代码
-- returnMsg 返回执行中的的错误描述
SPECIFIC SQL_OUT_LANGUAGE
LANGUAGE SQL
BEGIN
 DECLARE SQLCODE INTEGER DEFAULT 0;
 DECLARE SQLSTATE CHAR(5) DEFAULT '00000';
 DECLARE errorLabel CHAR(32) DEFAULT '';
 ......

 -- in case of no data found 
 DECLARE CONTINUE HANDLER FOR NOT FOUND
  BEGIN
   SET returnCode = SQLCODE;
-- 也可以设置为 SET returnCode = 0; 因为这个DECLARE是为了忽略NOT FOUND的执行结果
  END;

 -- in case of SQL error
 DECLARE EXIT HANDLER FOR SQLEXCEPTION
  BEGIN
   SET returnCode = SQLCODE;
   SET returnMsg = errorLabel;
  END;

 ......

对于SQLEXCEPTION也可以这样定义,用来忽略一些特定的error code, 但是要在程序体内判断returnCode的数值:
 -- in case of SQL error
 DECLARE CONTINUE HANDLER FOR SQLEXCEPTION
  BEGIN
   IF (SQLCODE = -454) THEN
     SET returnCode = 0;
-- 创建的数据库对象已经存在或者插入的记录在唯一键值上重复
   ELSE
     SET returnCode = SQLCODE;
     SET returnMsg = errorLabel;
   END IF;
  END;
......

 IF (returnCode = 0) THEN
  ......
 END IF;

 IF (returnCode = 0) THEN
  ...
 END IF;
END
--存储过程结束 </div> </div> </div> </div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • SQL过程的性能:提示和技巧
  • SQL 过程的性能: 提示和技巧
  • 一个SQL存储过程
  • 如何在SQL存储过程中处理错误

相关文章

  • 2017-06-28使用IBM DB2例程简化迁移的步骤
  • 2017-06-28DB2 V9.7 新特性:支持 XML 数据的分区表
  • 2017-06-28DBA必须具备跨平台管理不同RDBMS的能力
  • 2017-06-28DB2的高可用性和灾难恢复概述
  • 2017-06-28将 InfoSphere Warehouse 数据挖掘与 IBM Cognos 报告集成,第 1 部分: InfoSphere Warehouse 与 Cognos 集成架构概述
  • 2017-06-28使用DB2配置向导配置参数
  • 2017-06-28DB2 V9 自动维护,第 1 部分: 简介和创建数据库期间缺省启用自动收集统计信息功能
  • 2017-06-28DB2数据库系统信息集成解析
  • 2017-06-28DB2CLP命令的快速参考
  • 2017-06-28使用DB2look实用程序重新创建优化器访问计划

文章分类

  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase

最近更新的内容

    • DB2 Version 9.5中全局变量的了解
    • 使用 Apache 的 POI 和 HSSF 将 Excel 电子表格数据加载到 DB2
    • 讲解DB2数据库文件系统已满的解决方法
    • IBM DB2 日常维护汇总(八)
    • 使用DB2look重新创建优化器访问计划(4)
    • DB2 Spatial Extender 性能调优(1)
    • DB2 9.5的数据库内存保护
    • 全面了解DB2数据库中的各数据类型
    • DB2中几种遇到的SQL1032N出错的解决
    • DB2数据库基础总结

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有