美文网首页
存储过程

存储过程

作者: 伍陆柒_ | 来源:发表于2018-11-15 22:50 被阅读0次
什么是存储过程

简单的说,就是一组SQL语句集,功能强大,可以实现一些比较复杂的逻辑功能,类似于JAVA语言中的方法;

存储过程跟触发器有点类似,都是一组SQL集,但是存储过程是主动调用的,且功能比触发器更加强大,触发器是某件事触发后自动调用;

相对于oracle数据库来说,MySQL的存储过程相对功能较弱,使用较少

创建一个简单的存储过程

存储过程proc_add功能很简单,两个整型输入参数a和b,一个整型输出参数sum,功能就是计算输入参数a和b的结果,赋值给输出参数sum;

DELIMITER $
CREATE PROCEDURE proc_add(IN a int, IN b int, OUT sum int)
BEGIN
    DECLARE c int;
    if a is null then set a = 0; 
    end if;
  
    if b is null then set b = 0;
    end if;

    set sum  = a + b;
END
$
DELIMITER ;

set @num = 2;
call proc_add(@num,5,@result);
select @result as sum;
存储过程中的控制语句
DELIMITER $
CREATE PROCEDURE `proc_if`(IN type int)
BEGIN
    DECLARE c varchar(500);
    IF type = 0 THEN
        set c = 'param is 0';
    ELSEIF type = 1 THEN
        set c = 'param is 1';
    ELSE
        set c = 'param is others, not 0 or 1';
    END IF;
    select c;
END
$
DELIMITER ;

set @type=10;
call proc_if(@type);
循环while语句
DELIMITER $
CREATE PROCEDURE `proc_while`(IN n int)
BEGIN
    DECLARE i int;
    DECLARE s int;
    SET i = 0;
    SET s = 0;
    WHILE i <= n DO
        set s = s + i;
        set i = i + 1;
    END WHILE;
    SELECT s;
END
$
DELIMITER ;

set @n = 100;
call proc_while(@n);
实战案例
-- 队员表
create table players(
id int(5) PRIMARY KEY not NULL auto_increment,-- 选手id
pname varchar(500) -- 选手名字
)
insert into players(pname) values ('ALLEN'),('BOB'),('CLARK')
create table matches(
id int(5) PRIMARY KEY not NULL auto_increment,-- 比赛id
mname varchar(500) -- 项目名称
)
insert into matches values (10,'跳水'),(11,'滑板'),(12,'冰壶')
-- 参赛表
create table join_matches(
id int(5) PRIMARY KEY not NULL auto_increment, -- 参赛id
mid int(5),-- 比赛id
pid int(5),-- 选手id
grade decimal(5,2)-- 比赛成绩
)
insert into join_matches(mid,pid,grade) 
values  (10,1,9.75),(11,2,7.35),(12,3,8.15),(11,3,6.55),(10,2,6.75)

创建一个存储过程,删除给定球员参加的所有比赛

select * from join_matches

DELIMITER $
CREATE PROCEDURE `delete_matches`(IN p_playerno int)
BEGIN
     DELETE FROM join_matches WHERE pid = p_playerno;
END
$
DELIMITER ;

call delete_matches(2)

缺点

不同数据库,语法差别很大,移植困难,换了数据库,需要重新编写;

不好管理,把过多业务逻辑写在存储过程不好维护,不利于分层管理,容易混乱,一般存储过程适用于个别对性能要求较高的业务,其它的必要性不是很大;

相关文章

  • Mysql存储过程

    阅读目录:MySQL存储过程_创建-调用-参数 存储过程:SQL中的“脚本” 创建存储过程 调用存储过程 存储过程...

  • MySQL批量添加数据

    创建存储过程 执行存储过程 删除存储过程

  • 17 存储过程

    过程: 函数: 过程是没有返回值的函数 存储过程: 存储过程语法 存储过程1--创建简单的存储过程 存储过程2--...

  • 存储过程

    详见存储过程详解 创建存储过程 使用存储过程 存储过程简介 什么是存储过程:存储过程可以说是一个记录集吧,它是由一...

  • 存储过程与函数

    存储过程与函数存储过程的定义存储过程的创建存储过程的操作自定义函数 存储过程与函数 存储过程的定义 运行效率高 降...

  • 存储过程

    ps 不能修改过程体,要修改过程体必须先删除存储过程,再重建 mysql变量的术语分类: 1.用户变量:以"@"开...

  • 存储过程

    存储过程 过程,可以简单理解为是一个函数。 函数和过程的区别:函数总是向调用者返回数据,而过程没有数据返回。 Or...

  • 存储过程

    存储过程(Stored Procedure)是一个可编程的函数,是为了完成特定功能的SQL语句集;创建的存储过程保...

  • 存储过程

    一.基础语法 说明 delimiter // 一般情况下MYSQL以;结尾表示确认输入并执行语句,但在存储过程中;...

  • 存储过程

    存储过程:带有逻辑的sql语句。之前的sql没有条件判断,循环。 存储过程带上流程控制语句(if,while)。 ...

网友评论

      本文标题:存储过程

      本文链接:https://www.haomeiwen.com/subject/vouufqtx.html