• 捞鱼的搬砖奇
    2019-07-10
    DELIMITER //
    create procedure `get_sum_score`(IN roleMain VARCHAR(255),OUT total FLOAT)
    BEGIN
    select sum(hp_max) as sum_hp_max from heros where role_main=roleMain INTO total;
    END//
    DELIMITER ;

    call get_sum_score('坦克',@total);
    select @total
    展开
    
     13
  • 毛豆
    2019-07-12
    存储过程很重要,可不可以详细讲讲

    作者回复: 可以 考虑在进阶篇加一篇关于存储过程的使用。这个在工作中还比较常用

    
     7
  • Monday
    2019-08-07
    关于关于存储过程的版本控制请教以下两个问题,望老师回复,谢谢!
    1、版本控制指的是存储过程修改存储过程的定义,即修改存储过程的创建语句?
    2、请举例说明表索引发生了变化,会导致存储过程失效?
    
     3
  • 番茄
    2019-11-26
    请教下老师或者各位小伙伴,调用程序这里,直接call就出结果了,下面那句select为什么要加上呢

    CALL get_hero_scores(@max_max_hp, @min_max_mp, @avg_max_attack, '战士');
    SELECT @max_max_hp, @min_max_mp, @avg_max_attack;

    作者回复: CALL get_hero_scores(@max_max_hp, @min_max_mp, @avg_max_attack, '战士'); 这里是把结果放到max_max_hp, min_max_mp, avg_max_attack 这三个变量中进行返回,如果要显示出来结果,可以使用:SELECT @max_max_hp, @min_max_mp, @avg_max_attack;

    
     2
  • whaleFall_
    2019-10-25
    注意:CREATE PROCEDURE `get_sum_score`这里不是单引号,是` `号哦~
    # 编写存储过程get_sum_score,用来得到某一类型英雄的最大生命值的总和

    CREATE PROCEDURE `get_sum_score`(
            OUT sum_max_hp FLOAT,
            IN s VARCHAR(255)
        )
    BEGIN
        SELECT
            sum(hp_max)
        FROM heros
        WHERE role_main = s
        INTO sum_max_hp;
    END

    # 调用存储过程
    CALL get_sum_score(@sum_max_hp,'战士')
    SELECT @sum_max_hp;
    展开

    作者回复: Good Job 对的 不是单引号

    
     2
  • 夜路破晓
    2019-07-10
    发现但凡字段一多,尤其是还带下划线的,比较容易出现创建表后,再from新建表会报错.比如第二例,即便是复写,因为未察觉的失误导致某个字段名写错,那么运行"战士"实例时会报错.但是我复制老师的代码运行无误.两相对照发现就是某个字段的某个字母或者下划线导致的.
    问题一:
    s varchar(255) 前面没有IN ,我能理解为参数类型默认是IN吗?
    问题二:
    运行CALL实例中,字段前加@是固定用法吗?
    展开
     2
     2
  • 高志强
    2019-11-01
    终于明白了啥是存储过程,谢谢老师~

    作者回复: 加油志强

    
     1
  • Monday
    2019-08-07
    老师的脑图总结得很到位,求共享啊。谢谢

    作者回复: 感谢 我放到GitHub上了,可以看下

    
     1
  • 柔软的胖
    2019-07-14
    存储过程用到了BEGIN关键字,是不是表示存储过程就是一个事务?
     1
     1
  • 林彦
    2019-07-13
    1. 课程里提到“IN 参数必须在调用存储过程时指定,而在存储过程中修改该参数的值不能被返回。”这里的IN 参数必须在调用存储过程时指定的含义是什么?我查询了MySQL的存储过程定义时可以不包含 IN 参数。这句话有表示当存储过程的定义语句里有 IN 参数时,存储过程的语句中必须用到这个 IN 参数吗?

    2. 提到存储过程的缺点时讲到高并发的场景下,数据库会采用分库分表的方式,对可扩展性要求高,这种情况下存储过程会增加数据库的压力。能简单对比讲解这种情况下存储过程是和普通的SQL语句比更增加数据库的压力吗?为什么?

    3. 一个课外话题。TeraData里的BTEQ感觉和存储过程一样能包含SQL语句(至少一部分,如DDL,DML),和流控制语句。另外还多了一些功能。作用上有点像存储过程的加强或延伸。另外能以文件方式(批处理)执行。不知道后面的课程会不会有更多类似这样的应用,或者通过存储过程实现自动化执行的内容。
    展开
    
     1
  • 我行我素
    2019-07-10
    CREATE PROCEDURE `get_sum_score`(
                    OUT sum_hp_max FLOAT,
                    s VARCHAR(255)
                    )
    BEGIN
            SELECT sum(hp_max) FROM heros WHERE role_main = s INTO sum_hp_max;
    END

    CALL get_sum_score(@sum_hp_max, '法师');
    SELECT @sum_hp_max;
    展开

    作者回复: Good Job

    
     1
  • 张驰皓
    2020-01-13
    课程里貌似没有讲到存储过程怎样批量调用?比如创建了一个存储过程后,想传入多次输入来获取对应输出,这样应该怎么写语句呢?
    
    
  • taoist
    2019-12-17
    --MariaDB
    CREATE PROCEDURE `get_sum_score`(
    OUT sum_hp_max FLOAT,
    s VARCHAR(255)
    )
    BEGIN
    SELECT sum(hp_max) FROM heros WHERE role_main = s INTO sum_hp_max;
    END
    CALL get_sum_score(@sum_hp_max, '法师');
    SELECT @sum_hp_max;
    展开
    
    
  • 梁
    2019-11-17
    为啥存储过程对高并发支持不好呢?有一些同学也说不适合在oltp中跑,它不就也是发起一个简单的语句执行,具体执行的效率要看执行计划呀 ?
    
    
  • 丁丁历险记
    2019-11-14
    就是个毒瘤,慎用

    作者回复: 对 根据业务情况选择把,有些公司不用,也有一些公司在使用

     2
    
  • 扶幽
    2019-10-28
    小练习:
    DELIMITER //
    CREATE PROCEDURE get_sum_score(IN main_role1 VARCHAR(255), OUT sums INT)
    BEGIN
            SELECT SUM(hp_max) FROM heros WHERE main_role=main_role1;
    END //
    DELIMITER ;
    展开
    
    
  • Coool
    2019-10-22
    CREATE PROCEDURE `get_sum_score`(out sum_max_hp float,in s varchar(255))
    BEGIN
        select sum(hp_max)
        from heros
        where role_main=s
        into sum_max_hp;
    END

    call get_sum_score(@sum_max_hp,'战士') ;
    select @sum_max_hp ;
    展开

    作者回复: Good Job

    
    
  • 晶
    2019-10-17
    可以讲一下触发器吗?谢谢
    
    
  • Cola_
    2019-10-17
    delimiter //
    CREATE PROCEDURE `get_sum_scores`(
           OUT sum_max_hp FLOAT,
           s VARCHAR(255)
           )
    BEGIN
           SELECT SUM(hp_max) FROM heros WHERE role_main = s INTO sum_max_hp;
    END //
    delimiter ;

    call get_sum_scores(@sum_max_hp,’法师’);
    select @sum_max_hp;
    展开
    
    
  • qf年间
    2019-09-11
    存储过程的调用具体是什么样的呢,如何传入参数呢
    
    
我们在线,来聊聊吧