MySQL存储过程和函数

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_labelend_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]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值