3.定义条件和处理程序

3.1错误演示

#2.1错误演示:#错误代码: 1364
#Field 'email' doesn't have a default value
INSERT INTO employees(last_name)
VALUES('Tom');DESC employees;#错误演示:DELIMITER //CREATE PROCEDURE UpdateDataNoCondition()
BEGINSET @x = 1;UPDATE employees SET email = NULL WHERE last_name = 'Abel';SET @x = 2;UPDATE employees SET email = 'aabbel' WHERE last_name = 'Abel';SET @x = 3;
END //DELIMITER ;#调用存储过程
#错误代码: 1048
#Column 'email' cannot be null
CALL UpdateDataNoCondition();SELECT @x;

3.2定义条件(可选)

#2.2定义条件(可选)
#格式:DECLARE 错误名称 CONDITION FOR 错误码(或错误条件)#举例1:定义“Field_Not_Be_NULL”错误名与MySQL中违反非空约束的错误类型
#是“ERROR 1048 (23000)”对应。#方式1:使用mysql_error_code
DECLARE Field_Not_Be_NULL CONDITION FOR 1048;#方式2:使用sqlstate_value
DECLARE Field_Not_Be_NULL CONDITION FOR SQLSTATE'23000';#举例2:定义"ERROR 1148(42000)"错误,名称为command_not_allowed。#方式1:使用mysql_error_code
DECLARE command_not_allowed CONDITION FOR 1148;#方式2:使用sqlstate_value
DECLARE command_not_allowed CONDITION FOR SQLSTATE '42000';

3.3定义处理程序

#格式:DECLARE 处理方式 HANDLER FOR 错误类型 处理语句#方法1:捕获sqlstate_value
DECLARE CONTINUE HANDLER FOR SQLSTATE '42S02' SET @info = 'NO_SUCH_TABLE';#方法2:捕获mysql_error_value
DECLARE CONTINUE HANDLER FOR 1146 SET @info = 'NO_SUCH_TABLE';#方法3:先定义条件,再调用
DECLARE no_such_table CONDITION FOR 1146;
DECLARE CONTINUE HANDLER FOR NO_SUCH_TABLE SET @info = 'NO_SUCH_TABLE';#方法4:使用SQLWARNING
DECLARE EXIT HANDLER FOR SQLWARNING SET @info = 'ERROR';#方法5:使用NOT FOUND
DECLARE EXIT HANDLER FOR NOT FOUND SET @info = 'NO_SUCH_TABLE';#方法6:使用SQLEXCEPTION
DECLARE EXIT HANDLER FOR SQLEXCEPTION SET @info = 'ERROR';

3.4案例处理

#2.4 案例的处理DROP PROCEDURE UpdateDataNoCondition;#重新定义存储过程,体现错误的处理程序DELIMITER //CREATE PROCEDURE UpdateDataNoCondition()
BEGIN   #声明处理程序#处理方式1:DECLARE CONTINUE HANDLER FOR 1048 SET @prc_value=-1;#处理方式2:#DECLARE CONTINUE HANDLER FOR sqlstate'23000' SET @prc_value=-1;   SET @x = 1;UPDATE employees SET email = NULL WHERE last_name = 'Abel';SET @x = 2;UPDATE employees SET email = 'aabbel' WHERE last_name = 'Abel';SET @x = 3;
END //DELIMITER ;#调用存储过程
CALL UpdateDataNoCondition();
#查看变量
SELECT @x,@prc_value;#再举一个例子
#创建一个名称为“InsertDataWithCondition”的存储过程 代码如下。
#在存储过程中,定义处理程序,捕获sqlstate_value值,当遇到sqlstate_value值
#为23000时,执行EXIT操作,并且将@proc_value的值设置为-1。#准备工作CREATE TABLE departments
AS
SELECT * FROM atguigudb.`departments`;DESC departments;ALTER TABLE departments
ADD CONSTRAINT uk_dept_name UNIQUE(department_id);#①定义存储过程
DELIMITER //CREATE PROCEDURE InsertDataWithCondition()
BEGINSET @x = 1;INSERT INTO departments(department_name) VALUES('测试');SET @x = 2;INSERT INTO departments(department_name) VALUES('测试');SET @x = 3;
END //DELIMITER ;#②调用
#错误代码: 1062
#Duplicate entry '0' for key 'departments.uk_dept_name'CALL InsertDataWithCondition();#报错#③查看值SELECT @x; #2#④删除此存储过程
DROP PROCEDURE  InsertDataWithCondition;#⑤重新定义存储过程(考虑到错误的处理程序)DELIMITER //CREATE PROCEDURE InsertDataWithCondition()
BEGIN#处理程序#方式1:#declare exit handler for 1062 set @pro_value=-1;#方式2:#declare exit handler for sqlstate'23000' set @pro_value=-1#方式3:#定义条件DECLARE duplicate_entry CONDITION FOR 1062;DECLARE EXIT HANDLER FOR duplicate_entry SET @pro_value=-1;SET @x = 1;INSERT INTO departments(department_name) VALUES('测试');SET @x = 2;INSERT INTO departments(department_name) VALUES('测试');SET @x = 3;
END //DELIMITER ;#调用
CALL InsertDataWithCondition();SELECT @x,@pro_value;

P85程序出错的处理机制相关推荐

  1. JavaME程序 Run Anywhere-- 利用反射机制来动态加载声

    让JavaME程序 Run Anywhere-- 利用反射机制来动态加载声 时间:2008-02-23 09:26来源:互联网 让JavaME程序 Run Anywhere -- 利用反射机制来动态加 ...

  2. 帝国时代三计算机丢失,修复安装帝国时代程序出错3d3dx9_25.dll丢失在win7中方法...

    win7的电脑中很多的小伙伴喜欢在休闲的时候玩一下游戏来打发我们的时间的,对于帝国时代这一款游戏是很多的用户喜欢的,在win7电脑中有喜欢使用的遇到了问题,对于安装的提示帝国时代程序出现3d3dx9_ ...

  3. 数字溢出为啥程序出错

    数字溢出为啥程序出错 public class test2 {public static void main(String[] args) {int max = Integer.MAX_VALUE;i ...

  4. 程序员最痛苦的事,就是程序出错;程序员最最痛苦的事,就是程序出错了还没有错误信息!--IIS Service Unavailable 问题如何解决...

    今天有人问如何处理IIS网站出现"Service Unavailable"的情况. 在网上google了一下,导致这个出错的原因很多,而"Service Unavaila ...

  5. ise生成msk文件的用处_ISE中上载程序出错,msk文件缺失有关问题

    ISE中下载程序出错,msk文件缺失问题 原文:http://cathyun.spaces.live.com/blog/cns!7C9B5AD7F583967!1291.entry 今天实验调试时之前 ...

  6. 【技术贴】解决打开程序出错,提示错误429,activex部件不能创建对象,不用重装系统。...

    [技术贴]解决打开程序出错,提示错误429,activex部件不能创建对象,不用重装系统. 错误429修复包下载,activex部件不能创建修复包下载 1.最完美解决方案 去这里http://isha ...

  7. 芯片程序烧录的熔断机制与安全

    @T芯片程序烧录的熔断机制与安全OC 熔丝位是在一个特定的地址上可以读到熔丝状态的一个位.0表示已熔断,1表示未熔断.单片机MCU或者CPU等芯片在特定的引脚外加高电平后,可以通过产生的电流烧断里边的 ...

  8. STVP ST Visual Programmer 下载程序出错

    用STVP ST Visual Programmer 下载程序出错 用另一个sllink v2 连接相同开发板下载没问题 错误信息如下: Programming OPTION BYTE area- E ...

  9. 微信小程序运行及更新机制

    微信小程序运行及更新机制 1.微信小程序运行机制 1.1 前台和后台 1.2 小程序启动:冷启动和热启动 1.3 小程序销毁 2.微信小程序更新机制 2.1 启动时同步更新 定期检查发现版本更新 用户 ...

最新文章

  1. vc 版本 宏 (zz.IS2120@BG57IV3)
  2. scrapy爬取百万小说
  3. wxWidgets:Erase wxWidgets示例
  4. doc2html asp,ASP常见问题及解答(3)-ASP教程,ASP技巧
  5. isbool php,PHP PHPUnit assertIsBool()用法及代码示例
  6. VS2008使用技巧及快捷键大全
  7. 「镁客·请讲」云迹科技张名举:酒店是移动机器人最标准化的服务场景,将有更多服务岗位被机器人替代...
  8. python调用数据集mnist_使用MNIST数据集进行分类
  9. Arch安装deepin桌面环境
  10. Java对接支付宝(alipay)电脑网站生成二维码扫码支付 alipay.trade.page.pay统一收单下单并支付页面接口
  11. 文件服务器 配额,文件服务器配额邮件通知
  12. excel如何批量查询ip归属地?
  13. [推荐]白纸上的黑点和黑纸上的白点
  14. linux备份文件命令
  15. 进栈,出栈的详细知识
  16. css玻璃雨滴效果,纯css实现窗户玻璃雨滴逼真效果
  17. 基于ESP8266+华为云数据监控模块
  18. 关于bitamap旋转图片全黑
  19. Mac上浏览器无法联网的解决方法
  20. 你真的了解Linux(Deepin)的软件商店吗?(内附极力推荐的软件)

热门文章

  1. 2022年全球及中国全景X光机行业头部企业市场占有率及排名调研报告
  2. logstash使用JDBC连接MySQL错误(已经解决)
  3. 英语流利说20181228
  4. float类型的存储方式
  5. python绘图:截取matplotlib colormap色谱的一部分
  6. mysql克隆schema_MySQL clone plugin(克隆插件)
  7. 苏州大学东吴学院计算机系主任,苏州大学东吴学院正式揭牌
  8. 不到7日用户突破1000万!鸿蒙到底有多火爆?新一轮的开发风口
  9. MOM 系统介绍,带你了解 JMS 规范
  10. java程序设计题解与上机指导_Java程序设计习题解析与上机指导