存储过程是一条或多条SQL语句地方集合,可以看作批文件,又不仅限于批处理。
创建存储过程
CREATE PROCEDURE 过程名(IN | OUT | INOUT 参数名 类型)
[这里指定存储过程特性]
[SQL代码,使用BEGIN...END代表开始和结束]
特性
创建存储函数
CREATE FUNCTION 函数名(IN | OUT | INOUT 参数名 类型)
RETURNS 类型
[这里指定存储过程特性]
[SQL代码,使用BEGIN...END代表开始和结束]
RETURN value (必须包含)
变量的使用
作用在子程序中,在BEGIN...END中声明使用
定义变量
DECLARE 变量名 类型 默认值
为变量赋值
SET 变量名=值;
定义条件
DECLARE 条件名 CONDITION FOR 条件类型
条件类型:SQLSTATE 值 sqlstate_value | mysql_error_code
ERROR 1142(42000) 1142--mysql_error_code;42000--sqlstate_value;
定义处理程序
DECLARE 处理类型 HANDLER FOR 条件值 程序语句段sp_statement
处理类型(错误处理方式)
条件值(表示错误类型)
- CONTINUE -- 遇到错误不处理继续执行;
- EXIT -- 遇到错误退出;
- UNDO -- 遇到错误撤回之前操作(MySQL暂时不支持);
光标的使用
声明处理程序之前被声明,变量和条件必须在声明光标和处理程序之前被声明
定义光标
DECLARE 光标名 CURSOR FOR select_statement(表示SELECT语句的内容,返回一个创建光标的结果集)
打开光标
OPEN 光标名;
关闭光标
CLOSE 光标名;
使用光标
FETCH 光标名 INTO 变量名列表(将SELECT查询出来的语句传入该变量,变量名需提前定义好)
流程控制语句使用
调用存储过程和函数
CALL 存储过程名(参数)
使用SELECT查看结果
SELECT 函数名
查看存储过程和函数
查看状态
LIKE表示匹配过程或函数的名称
查看定义
修改存储过程和函数
sp_name:存储过程和函数名称
特性:
删除存储过程和函数
要点:
存储过程和函数的区别
相同点:本质上都是存储程序
不同点:
函数只能通过return返回值,过程通过out参数返回值;
函数可以嵌入在SELECT中,过程作为单独一部分执行;
函数限制多,只能用表变量,不能用临时变量,过程限制少;
存储过程可以调用其他存储过程,但不可删除其他存储过程。
存储过程代码不可改变,只能删掉重新写。
存储过程中的参数不要与数据表中字段名相同。
存储过程参数若要使用中文,需要在定义存储过程的时候在后面加上character set gbk。