存储过程
1.简单存储过程
用DELIMITER $$ 定义分隔符为$$,这个可以自己定义。最后用DELITIMTER ; 把分隔符换回来,在delimiter后面一定要有一个空格。
CREATE PROCEDURE 过程名(参数1,参数2,...)
下面是主体,begin...end,中间写过程
BEGIN
SELECT * FROM test.退货;
END;
完整代码:
DELIMITER $$
CREATE PROCEDURE 没有参数的过程()
BEGIN
SELECT * FROM test.退货;
END;
$$
DELITIMTER ;
调用过程:
call 没有参数的过程();
2.带变量声明的两个过程
declare 变量名 变量类型 默认值;
注意:多个变量要分行声明
变量赋值的方法
1). set a = 'user';
2). select 聚合函数/表中的列名 into 变量名 from 表名;
select 变量名; #返回变量值
DELIMITER $$
CREATE PROCEDURE 复杂无参过程()
BEGIN
BEGIN
DECLARE sum_student VARCHAR(20) default '';
DECLARE birthday INT(3) DEFAULT 0;
SELECT COUNT(*) INTO sum_student FROM students;
SELECT SUM(student_birthday) INTO birthday FROM students;
SELECT sum_student,birthday;
END;
BEGIN
DECLARE ID VARCHAR(20) DEFAULT '';
SELECT SUM(student_id) INTO ID FROM students;
SELECT ID;
END;
END
$$
DELIMITER ;
3.带全局变量的过程
变量是有作用域的,在begin..end之间有效,end结束变量的作用范围结束。
需要在多个块之间传递值时,可以使用全局变量。即在最前面的begin里写。
BEGIN
DECLARE 总数 INT(5) DEFAULT 0;
BEGIN
SELECT COUNT(*) INTO 总数 FROM 订单;
END;
SELECT 总数;
END