存储过程和函数(1)

一、概述

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:匹配数值类型错误的代码;

猜你喜欢

转载自blog.csdn.net/m0_37248802/article/details/79016680