17)错误处理
Posted xuan01
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了17)错误处理相关的知识,希望对你有一定的参考价值。
declare关键字:
自定义错误处理程序时,需使用declare关键字,格式如下:
declare 错误处理类型 handler for 错误触发条件 自定义错误处理程序;
其中,错误处理类型:continue exit;
错误触发条件:预定义、MySQL错误代码、自定义错误触发条件、ANSI标准错误代码
自定义错误处理程序位置: 变量、游标声明之后,但是在语句执行之前;
1)采用预定义的触发条件:
该触发包括:sqlwarning、sqlexception、not found;
设计一个输出给定学号的姓名;没有学号的输出 ‘没有学号为 的学生’;
delimiter $$ create procedure get_name_proc(in stu_no char(11), out stu_name char(10)) begin declare exit handler for not found begin select concat(\'没有学号为\',stu_no,\'的学生 \') error; end; select student_name into stu_name from student where student_no=stu_no; end; $$ delimiter ;
测试:可以看到对于没有学号的,输出符合预期;
set @stu_name = \'\'; call get_name_proc(\'2023001\',@stu_name);
select @stu_name;
call get_name_proc(\'2023009\',@stu_name);
2)使用MySQL错误处理代码
我们向课程表 执行一条插入失败命令;注意,此前我们的 teacher_no 已经是unique约束的;
唯一约束的 MySQL错误处理代码是1062;23000是对应的ANSI编号;
我们可以设计一个向课程表中插入新项 的过程,但是该项中的教师 已经开设了一门课,提示错误;
delimiter $$ create procedure insert_course_proc(in c_name char(10),in cnt int,in des varchar(100),in tea_no char(10)) begin declare exit handler for 1062 begin select \'该教师已经提交了一门选修课!\' error; end; insert into course(course_name,up_limit,description,teacher_no) values(c_name,cnt,des,tea_no); end; $$ delimiter ;
测试:
call insert_course_proc(\'java\',150,\'暂无\',\'001\');
3)使用ANSI标准错误代码
还是使用上面的例子,只是替换了一句declare:
declare exit handler for 1062 #将上面这句替换为下面 declare exit handler for sqlstate \'23000\'
4)自定义错误触发条件
语法为:
declare 错误触发条件 condition for 错误代码;
还是上面例子,替换为:
declare exit handler for 1062 #将上面这句替换为下面: declare unique_error condition for 1062; declare exit handler for unique_error
5)捕获多个错误处理程序
那么是否可以一个存储过程处理多个错误程序呢?当然可以;比如这个例子,teacher_no 不仅可能会违反唯一约束,还有可能违反外键约束;
可以看出违反外键约束 的MySQL错误处理代码是 1452;
由此,我们设计一个 违反外键约束和唯一约束 的错误处理过程:
delimiter $$ create procedure insert_course4_proc(in c_name char(10),in cnt int,in des varchar(100),in tea_no char(10)) begin declare exit handler for 1452 select \'该教师不存在!\' error; declare exit handler for 1062 begin select \'该教师已经提交了一门选修课!\' error; end; insert into course(course_name,up_limit,description,teacher_no) values(c_name,cnt,des,tea_no); end; $$ delimiter ; #测试 call insert_course4_proc(\'java\',150,\'暂无\',\'009\'); call insert_course4_proc(\'java\',150,\'暂无\',\'001\');
liteos错误处理
1. 概述
1.1 基本概念
错误处理指用户代码发生错误时,系统调用错误处理模块的接口函数,完成上报错误信息,并调用用户自己的钩子函数,进行特定的处理。
错误处理模块实现OS内部错误码记录功能。OS内部错误码无法通过接口返回,通常会上报错误处理模块进行记录。用户可以通过挂接错误处理的钩子函数,进行特定的处理。如果OS上报的错误是致命错误,系统会进行异常流程接管,从而可以保存现场以便定位问题。
通过错误处理,我们可以把用户在程序中的非法输入进行控制和提示,以防程序崩
溃。
1.2 运作机制
错误处理是一种机制,用于处理异常状况。通过错误处理,我们可以将用户在程序中的非法输入进行控制和提示,以防程序崩溃。当程序出现异常错误的时候,会显示相应的错误码用于提示用户。此外,如果有相应的错误处理程序,则会执行这个程序,以防程序崩溃。
2. 开发指导
2.1 功能
错误处理模块为用户提供下面几种功能。
功能分类 | 接口名 | 描述 |
---|---|---|
错误处理 | LOS_ErrHandle | 根据错误处理函数来对错误进行处理 |
3. 编程实例
3.1 实例
在下面的例子中,演示如下功能:
- 执行错误处理函数
3.2 编程实例
代码实现如下:
extern USER_ERR_FUNC_S g_stUserErrFunc;
void *err_handler(CHAR *pcFileName,UINT32 uwLineNo,
UINT32 uwErrorNo,UINT32 uwParaLen,VOID *pPara)
printf("err handel ok\\n");
UINT32 Example_ErrCaseEntry(VOID)
/*执行错误处理函数*/
LOS_ErrHandle(NULL, 0,0,0, NULL);
return LOS_OK;
3.3 结果
编译运行得到的结果
以上是关于17)错误处理的主要内容,如果未能解决你的问题,请参考以下文章
HTTP 错误 404.17 - Not Found 请求的内容似乎是脚本,因而将无法由静态文件处理程序来处理。
WCF HTTP 错误 404.17 - 未找到 请求的内容似乎是脚本,不会由静态文件处理程序提供
HTTP 错误 404.17 - Not Found 请求的内容似乎是脚本,因而将无法由静态文件处理程序来处理
IIS7出现“HTTP 错误 404.17 - Not Found 请求的内容似乎是脚本,因而将无法由静态文件处理程序来处理。”错误-Windows-