存储过程,是在大型数据库系统中,为完成某一特定功能的sql语句集(类似于自定义函数),保存在数据库中,

使用时,通过指令call调用存储过程的名称并传递参数,经过一次预编译以后使用时,不需要再编译,

一、简单的存储过程

-- 创建存储过程
create procedure proc_p1()
begin
    select * from v1;
end 

-- 调用存储过程
call proc_p1();

二、带参数的存储过程

-- 创建存储过程
drop procedure if EXISTS proc_p1; 
create procedure proc_p1(in i1 int)
begin
    declare d1 int;
    declare d2 int default 3;
    set d1 = i1+d2;
    select * from v1 where nid>d1;
end 

-- 调用存储过程
call proc_p1(2);

注意:

  1、存储过程的修改很麻烦,通常都是直接删除、重写,使用语句:drop procedure if EXISTS ……

  2、存储过程涉及的关键字:in、declare、set、call等,

  3、如上语句在某些终端上无法执行,因为sql语句是默认以分号为结束的,begin…end中的分号会影响代码,

  在实际应用中,会在存储过程的开始和结束,都进行delimiter声明,指定结束标志,具体如下:

-- 创建存储过程
delimiter $$
drop procedure if EXISTS proc_p1 $$ 
create procedure proc_p1(in i1 int)
begin
    declare d1 int;
    declare d2 int default 3;
    set d1 = i1+d2;
    select * from v1 where nid>d1;
end $$
delimiter ;