存储过程和函数的区别是函数必须有返回值。
1. 创建
1 | -- 修改定界符为$$,因为在创建存储过程中会用到 分号,系统会误以为结束而实际为结束,所以需要修改掉原来的分号界定符; |
2. 特征值
CONTAINS SQL
:子进程不包含读写数据的语句;NO SQL
:表示子程序中不使用SQL语句;READS SQL DATA
:表示子进程包含读数据的语句;MODIFIES SQL DATA
:表示子进程包含修改数据的语句;- SQL SECURIT:
DEFINER
:定义子程序改用创建子程序的者的许可来执行,还是调用者的许可来执行,这里是定义者;INVOKER
:调用者;【因为调用该存储过程中,用户并不一定有执行子程序的权限】。
3. 删除
1 | DROP {PROCEDURE | FUNCTION} [IF EXISTS] sp_name; |
4. 查看
1 | SHOW {PROCEDURE | FUNCTION} STATUS [LIKE 'PATTERN']; |
5. 调用
1 | CALL Bschool(p_age, p_id, @result); |
6. 变量
1 | DECLARE var_name[,...] TYPE [DEFAULT value] |
7. 条件的定义和处理
- 条件的定义和处理可以用来定义在处理过程中遇到问题的处理步骤;
- 对出现的错误码和或相应的值进行处理,如异常处理。
8. 光标的使用
- 存储过程和函数中可以使用光标对结果集进行循环的处理;
- 使用方法:
1
2
3
4
5
6
7
8-- 声明光标
DECLARE cursor_name CURSOR FOR select_statement;
-- OPEN光标
OPEN cursor_name
-- FETCH光标
FETCH cursor_name
-- CLOSE光标
CLOSE cursor_name
9. 流程控制
- IF
- CASE
- LOOP
- LEAVE
- ITERATE
- REPEAT
- WHILE