一、概述
1、存储过程就是一条或者是多条SQL语句的集合,可视为批文件,用于数据的批量处理,并不是仅仅作为批数据处理;
2、存储过程可以分为存储过程和函数,使用create procedure和create function来创建存储过程和函数,我们使用call语句来调用存储过程;
3、函数可以从语句外调用,也能返回标量值。存储过程也可以也可以调用其他的存储过程。
4、在编写存储过程的时候,可能在存储过程中需要复杂的SQL语句,并且要有创建存储过程的权限,但是存储过程将简化操作,减少冗余的操作步骤,同时,还可以减少操作过程中的失误,提高效率。
二、存储过程
1、创建存储过程
create procedure 存储名称([in|out|inout] 参数名称 参数类型 ) +sql代码内容(也就是我们经常说的增删改查基本语句);
2、实例:
(1)不带参数的创建存储过程;
create procedure testPro() begin select *from test ; end;(2)创建带有参数的存储过程,创建一个名为testPro的存储,把查询到的结果存放到参数paraml中;
Create procedure testPro(out paraml int) begin select * from test; end;(3)delimiter 语句的作用是将MySQL语句的结束符设置为//,当然存储过程也可以使多余的语句或者是复杂的语句,其本身也可以调用其他的函数组成更加复杂的条件;
三、函数
1、创建函数
create function 函数名称 (in |out |inout 参数名称 参数类型) returns 参数类型 +select语句;returns 参数类型 表示函数返回的数据类型;
2、实例操作:
(1)创建函数
create function test() returns int(50) return (查找所对应的语句);
(2)创建一个存储函数,参数定义为空,返回一个int类型的结果;
delimiter // create function test() returns int(11) return (select *from test where id=1); //
(3) 在创建存储函数的时候,如果存储函数中的return语句将返回一个不同于数据类型的returns字句中指定的类型的值的时候,返回值将被强制为恰当的类型;
四、变量
1、变量的使用
(1)定义变量
在存储过程中使用declare语句定义变量,语法格式如下:
declare 变量名称 变量类型 长度;
(2)实例操作
1)定义名称为test的变量,类型为int,默认值是100;
declare test int default 100;
2)为变量赋值,这里允许使用set a=x ,b=y,
set 变量名称 ='变量值';
3)在mysql语句中可以通过select......into语句为一个或者是多个变量赋值;
语法如下:select 列名称【】 into 变量名称 【】 查询表达式条件,包括表名称和where子句;
declare test1 char(50);
select * into 字段1,字段2 from test where 条件语句;
2、定义条件和处理程序
(1)定义条件(事先定义程序执行过程中遇到的问题,处理程序定义了在遇到这些问题是应该采取的措施,并保证存储过程或函数在遇到警告或者是错误是能够继续进行);
declare condition_name condition for [condition_type]
[condition_type];
sqlstate [value] sqlstate_value |mysql_error_code
说明:
condition_name:参数表示条件的名称;condition_type:参数表示条件的类型;
sqlstate_value和MySQL_error_code都可以表示mysql的错误,
(2)实例操作:
1)定义ERROR 1148(42000)错误,名称为command_not_allowed,可以使用两种不同的方法进行定义;
方法一:使用sqlstate_value
declare command_not_allowed condition for sqlstate '42000';
方法二:使用mysql_error_code
declare command_not_allowed condition for 1148;
2、定义处理程序(使用declare语句);
declare handler_type handler for condition_value[] sp_statement hander_type;
continue|exit|undo
condition_value:
sqlstate [value] sqlstate_value
|condition_name
|sqlwaring
|not found
|sqlexception
|mysql_error_code
说明:
handler_type:为错误处理方式,参数值取三个:continue、exit和undo。continue表示遇到错误不处理,继续执行;exit遇到错误马上退出;undo表示遇到错误后撤回之前的操作,mysql中暂时不支持这样的操作;
condition_value表示错误类型,可以取以下值:
1)sqlstate[value] sqlstate_value:包含五个字符的字符串错误值;
2)condition_name: 表示declare condition定义的错误和条件:
3)sqlwaring:匹配所有的以01开头的sqlstate错误代码;
4)not found:匹配所有的以02开头的sqlstate错误代码;
5)sqlexception:匹配所有没有被sqlwaring或者notfound捕获的sqlstate错误代码;
6)MySQL_error_code:匹配数值类型错误的代码;