一.存储过程
语句结构
create procedure pr_add
(
)
begin
end;
//申明变量
declare c int;
//if判断语句
if a is null then
set a = 0;//set 赋值语句
end if;
循环
//while do end while循环
while i<5 do
......
end while;
//repeat until end repeat循环
repeat
insert into t1(filed) values(i);
set i=i+1;
until i>=5
end repeat;
//loop leave end loop循环
loop_label: loop
insert into t1(filed) values(i);
set i=i+1;
if i>=5 then
leave loop_label;
end if;
end loop;
注意:
MySQL 存储过程中的每条语句的末尾,都要加上分号 “;”
declare c int; - 这是单行 MySQL 注释 (注意- 后至少要有一个空格)
变量 使用DECLARE来声明,DEFAULT赋默认值,SET赋值
2.存储过程例子
CREATE PROCEDURE `test`(IN `in_num` VARCHAR(50), IN `out_num` VARCHAR(50))
LANGUAGE SQL
NOT DETERMINISTIC
READS SQL DATA
SQL SECURITY DEFINER
COMMENT '测试'
BEGIN
create temporary table if not exists tem_test
(
id varchar(50) primary key,
name varchar(50),
age varchar(50)
)engine = memory;
begin
insert into tem_test(id,name,age) values(in_num,in_num,in_num);
select * from tem_test;
select count(*) into out_num from tem_test;
end;
truncate table tem_test;/**删除临时表**/
END
3.调用存储过程
call procedure();//()必须要加上
二 存储函数
什么是存储函数: 封装一段sql代码,完成一种特定的功能,返回结果。
CREATE FUNCTION name_from_employee (emp_id INT )
RETURNS VARCHAR(20)
BEGIN
RETURN (SELECT name
FROM employee
WHERE num=emp_id );
END
三存储过程,存储函数的优缺点
一、 存储函数有且只有一个返回值,而存储过程不能有返回值。
二、 函数只能有输入参数,而且不能带in, 而存储过程可以有多个in,out,inout参数。
三、 存储过程中的语句功能更强大,存储过程可以实现很复杂的业务逻辑,而函数有很多限制,
如不能在函数中使用insert,update,delete,create等语句;存储函数只完成查询的工作,可接
受输入参数并返回一个结果,也就是函数实现的功能针对性比较强。
四、 存储过程可以调用存储函数。但函数不能调用存储过程。
五、 存储过程一般是作为一个独立的部分来执行(call调用)。而函数可以作为查询语句的一个部
分来调用。