MySQL存储过程和函数
存储过程
创建语法:
CREATE PROCEDURE procedure_name([procedure_parameter[,...]])
[characteristic...] routine_body
procedure_name
为存储过程的名字
procedure_parameter
为参数
characteristic
为语句主体的类型
类型名称 | 含义 |
---|---|
LANGUAGE SQL | 表示routine_body 部分由SQL语句组成,为默认类型 |
[NOT] DETERMINITIC | 表示存储过程的执行结果是否确定,即相同的输入是否一定得到相同的运行结果 |
CONTAINS SQL | 可以包含SQL语句 |
NO SQL | 不包含SQL语句 |
READS SQL DATA | 包含读数据的语句 |
MODIFIES SQL DATA | 包含修改数据的语句 |
SQL SECURITY {DEFINER/INVOKER} | 执行改存储过程的权限所有者,DEFINER表示只有定义者能执行,INVOKER表示调用者可以执行 |
DELIMITER $$
CREATE PROCEDURE proce_employee_sal()
COMMENT '查询所有雇员的工资'
BEGIN
SELECT sal
FROM t_employee;
END$$
DELIMITER ;
函数
函数的语法和存储过程大体相同,只是多了返回值
DELIMITER $$
CREATE PROCEDURE proce_employee_sal(empno INT(11))
RETURNS DOUBLE(10, 2)
COMMENT '查询某个雇员的工资'
BEGIN
RETURN (SELETE sal
FROM t_employee
WHERE t_employee.empno=empno);
END$$
DELIMITER ;
变量
声明变量
DECLARE var_name[,...] type [DEFAULT value]
赋值变量
SET var_name=expr[,...]
SELECT field_name[,...] INTO var_name[,...]
FROM table_name
WHERE conditions
操作条件
定义条件
DECLARE condition_name CONDITION FOR condition_value
condition_value:
SQLSTATE[VALUE] sqlstate_value
|mysql_error_code
定义处理程序
DECLARE handler_type HANDLER FOR condition_value[,...] sp_statement
handler_type:
CONTINUE:
|EXIT
|UNDO
condition_value:
SQLSTATE[VALUE] sqlstate_value
|condition_name
|SQLWARNING
|NOT FOUND
|SQLEXCEPTION
|mysql_error_code
游标
声明游标
DECLARE corsor_name CORSOR FOR select_statement;
select_statement
表示游标针对的select语句
打开游标
游标打开时,指向的时第一条记录的前边
OPEN cursor_name
使用游标
FETCH cursor_name INTO var_name [, var_name]...
游标将执行结果保存到参数变量
var_name
中
var_name
的定义必须在使用游标之前
关闭游标
CLOSE cursor_name
流程控制
条件控制
IF search_condition THEN statement_list
[ELSEIF search_condition THEN statement_list]
[ELSE search_condition]
END IF
CASE case_value
WHEN when_value THEN statement_list
[WHEN when_value THEN statement_list]
[ELSE statement_list]
END CASE
循环控制语句
[begin_label:] LOOP
statement_list
END LOOP [end_label]
begin_label
和end_label
分别为开始和结束循环的标志
[begin_label:] WHILE search_condition DO
statement_list
END WHILE [end_label]
[begin_label:] REPEAT search_condition DO
statement_list
END REPEAT [end_label]