CREATE PROCEDURE 存储过程名称 ([ 参数列表 ])BEGIN-- SQL 语句END ;
- -- 创建
-
- DELIMITER $ #将语句的结束符号从分号;临时改为两个$(可以是自定义)
-
- CREATE PROCEDURE p1()
- BEGIN
- select count(*) from stu;
- END $
-
- DELIMITER ; #将语句的结束符号恢复为分号

call p1();

show create procedure p1;
drop procedure if exists p1;
MySQL存储过程的参数用在存储过程的定义,共有三种参数类型,IN,OUT,INOUT,形式
- DELIMITER $
-
- CREATE PROCEDURE p2(in myid int)
- BEGIN
- select * from stu where id=myid;
- END $
-
- DELIMITER ;
调用call p2(1);

char类型的参数
- DELIMITER $
-
- CREATE PROCEDURE p2(in myname VARCHAR(255))
- BEGIN
- set @sql = 'select * from stu where name = ?'; -- 拼接查询总记录的SQL语句
- prepare stmt from @sql; -- 预定义一个语句,并将它赋给 stmt
- set @a=myname;
- execute stmt using @a; -- 执行语句带参数,有其他参数加,分开
- deallocate prepare stmt;-- 要释放一个预定义语句的资源
- END $
-
- DELIMITER ;
调用

- DELIMITER $
-
- CREATE PROCEDURE p3(out result int)
- BEGIN
- set result=1;
- END $
-
- DELIMITER ;
调用,传入一个无初始化的变量

结果

- DELIMITER $
-
- CREATE PROCEDURE p4(inout result int)
- BEGIN
- set result:=result+1;
- END $
-
- DELIMITER ;
调用,传入一个初始化的变量result,查看输出结果result

存储函数是有返回值的存储过程,存储函数的参数只能是IN类型的。具体语法如下
- CREATE FUNCTION 存储函数名称 ([ 参数列表 ])
- RETURNS type [characteristic ...]
- BEGIN
- -- SQL语句
- RETURN ...;
- END ;
characteristic说明
DETERMINISTIC的存储过程
- create function fun1(n int)
- returns int deterministic
- begin
- declare total int default 0;
- while n>0 do
- set total := total + n;
- set n := n - 1;
- end while;
- return total;
- end;
- select fun1(50);
READS SQL DATA的存储过程
- create function fun2(id int(5))
- returns varchar(50) reads sql data
- begin
- DECLARE result VARCHAR(250);
- set result=CONCAT('SELECT * FROM stu WHERE stu.id=', id);
- return result;
- end;
-
- select fun2(1)
NO SQL的存储过程
- CREATE FUNCTION fun3()
- RETURNS VARCHAR(50) NO SQL
- BEGIN
- DECLARE result VARCHAR(50);
- SET result = 'Function';
- RETURN result;
- END;
- select fun3()