目录
10.1.1 创建存储过程
10.1.2 创建存储函数
10.1.3 变量的使用
10.1.4 定义条件和处理程序
10.1.5 光标的使用
10.1.6 流程控制的使用
10.2.1 调用存储过程
10.2.2 调用存储函数
10.3.1 SHOW STATUS语句查看存储过程和函数的状态
10.3.2 SHOW CREATE语句查看存储过程和函数的定义
10.3.3 从information_schema.Routines表中查看存储过程和函数的信息
10.4 修改存储过程和函数
10.5 删除存储过程和函数
Delimiter 关键字定义SQL的结束符号,默认是分号‘;’,不好写过程和函数。所以最好在创建过程和函数之前把结束符换一下,比如delimiter //。
创建存储过程,需要使用CREATE PROCEDURE语句。
CREATE PROCEDURE
sp_name ( [proc_parameter] )[characteristics ...]
routine_body
创建存储过程,需要使用CREATE FUNCTION语句。
CREATE FUNCTION
func_name ( [func_parameter] )
RETURNS type [characteristic ...]
routine_body
指定参数为IN, OUT或INOUT只对PROCEDURE是合法的。(FUNCTION中总是默认为IN参数) 。RETURNS子句只能对FUNCTION做指定,对函数而言这是强制的。它用来指定函数的返回类型,而且函数体必须包含一个RETURN value语句。
1.定义(声明)变量
DECLARE var_name[,varname]… date_type [DEFAULT value(没有则Null)];
可以在子程序中声明和使用,作用域为begin…end;
2.为变量赋值
SET var_name = expr [, var_name = expr] ...;可局部/用户/系统类型的变量合并。
MySQL中还可以通过SELECT ... INTO为一个或多个变量赋值,语法如下:
SELECT col_name[,...] INTO var_name[,...] table_expr;
特定条件需要特定处理。这些条件可以联系到错误,以及子程序中的一般流程控制。定义条件是事先定义程序执行过程中遇到的问题,处理程序定义了在遇到这些问题时应当采取的处 ,理方式,并且保证存储过程或函数在遇到警告或错误时能继续执行。这样可以增强存储程序处理问题的能力,避免程序异常停止运行。
Declare 条件名 condition for 条件类型(value/code)
2.定义处理程序
Declare [ continue | exit | undo ] handle for condition_value[,…] sp_statment
"@var name"表示用户变量,使用SET语句为其赋值,用户变量与连接有关,一个客,户端定义的变量不能被其他客户端看到或使用。当客户端退出时,该客户端连接的所有变,量将自动释放。
查询语句可能返回多条记录,如果数据量非常大,需要在存储过程和储存函数中使用光标来逐条读取查询结果集中的记录。应用程序可以根据需要滚动或浏览其中的数据。光标必须在声明处理程序之前被声明,并且变量和条件还必须在声明光标或处理程序之前被声明。可以将光标存储的查询内容利用函数返回。
在过程和函数中使用;
Declare cursor_name COURSOR FOR 查询语句(select_statement);
OPEN cursor_name;
FETCH cursor_name INTO var_name[,…参数名称];
var_name必须在光标定义之前定义好。
4.关闭光标
CLOSE cursor_name;
用来根据条件控制语句的执行。可以使用BEGIN…END构造复杂的控制语句;
IF condition THEN 语句1;
ELSE IF…
ELSE 语句2;
END IF
CASE condition
WHEN value1 THEN 语句1;
WHEN value2 THEN 语句2;
[ELSE 语句N]
END CASE
或者
CASE
WHEN 条件1 THEN 语句1;
WHEN 条件2 THEN 语句2;
[ELSE 语句N];
END CASE;
[ loop_label: ] LOOP
语句列;
[自加减条件 THEN LEAVE LOOP;]
END LOOP [ loop_label ];
LEAVE label_name;
再次循环,将执行顺序转到语句段开头处;可在LOOP, REPEAT, WHILE内;
ITERATE label;
循环直到条件为真
[repeat_label:] REPEAT
语句列;
UNTIL 条件
END REPEAT [repeat_label]
条件为真,则循环;
[while_label:] WHILE 条件 DO
语句列;
END WHILE [ while_lable ];
存储过程的调用是通过CALL语句进行调用的。
CALL sp_name([parameter[,...]])
存储函数的使用方法与MySQL内部函数的使用方法是一样的。
SHOW STATUS语句可以查看存储过程和函数的特征或者状态。
SHOW {PROCEDURE | FUNCTION} STATUS
[LIKE 'pattern']
LIKE 语句表示匹配储存过程或者函数的名称
SHOW CREATE语句查看存储过程和函数的状态。
SHOW CREATE {PROCEDURE | FUNCTION} sp_name
MySQL中存储过程和函数的信息存储在information_schema数据库下的Routines表中。可以通过查询该表的记录来查询存储过程和函数的信息。
SELECT * FROM information_schema.Routines
WHERE ROUTINE_NAME=' sp_name ' ;
使用ALTER语句可以修改存储过程或函数的特性。
ALTER {PROCEDURE | FUNCTION} sp_name [characteristic ...]
特性包括
删除存储过程和函数,可以使用DROP语句。
DROP {PROCEDURE | FUNCTION} [IF EXISTS] sp_name