美文网首页
存储过程(转)

存储过程(转)

作者: 屎倒淋头还嚼便 | 来源:发表于2019-05-18 12:00 被阅读0次

    出自:https://www.cnblogs.com/mark-chan/p/5384139.html

    // 具体例子

    DELIMITER //
    DROP PROCEDURE IF EXISTS demo;
    CREATE PROCEDURE demo()
        BEGIN
        DECLARE n int DEFAULT 0;
            WHILE(n<20000) DO
                INSERT INTO t_user(name) VALUES(substring(MD5(RAND()),floor(RAND()*26)+1,6));
            set n = n + 1;
            END WHILE ;
       END //
    DELIMITER ;
    call demo();

    DELIMITER;
    DROP PROCEDURE IF EXISTS demo;
    CREATE PROCEDURE demo()
        BEGIN
        DECLARE n int DEFAULT 0;
            WHILE(n<3) DO
                INSERT INTO liuyan(liuyan) VALUES(substring(MD5(RAND()),floor(RAND()*26)+1,6));
            set n = n + 1;
            END WHILE ;
       END;
    DELIMITER ;
    call demo();

    上面是在查询中执行的语句,语句中新建了一个存储过程demo,并且说如果demo已经存在就删除调(如果已有demo,会删除,并重新创建。如果没有demo,就新建一个存储过程demo)
    下面是新建函数,是一个存储过程,可以保存为demo,存储过程的名称为demo,存储过程demo可以在ssm框架中调用。

    BEGIN
        DECLARE n int DEFAULT 0;
            WHILE(n<200) DO
                INSERT INTO user(userId,userName) VALUES(500 + RAND() * (1000 - 500),substring(MD5(RAND()),floor(RAND()*26)+1,6));
            set n = n + 1;
            END WHILE ;
      END

    ssm调用存储过程时,存储过程支持事务。

    事务回滚

    分隔符

    MySQL默认以";"为分隔符,如果没有声明分割符,则编译器会把存储过程当成SQL语句进行处理,因此编译过程会报错,所以要事先用“DELIMITER //”声明当前段分隔符,让编译器把两个"//"之间的内容当做存储过程的代码,不会执行这些代码;“DELIMITER ;”的意为把分隔符还原。

    参数

    存储过程根据需要可能会有输入、输出、输入输出参数,如果有多个参数用","分割开。MySQL存储过程的参数用在存储过程的定义,共有三种参数类型,IN,OUT,INOUT:

    IN参数的值必须在调用存储过程时指定,在存储过程中修改该参数的值不能被返回,为默认值

    OUT:该值可在存储过程内部被改变,并可返回

    INOUT:调用时指定,并且可被改变和返回

    DELIMITER //
      CREATE PROCEDURE out_param(OUT p_out int)
        BEGIN
          SELECT p_out;
          SET p_out=2;
          SELECT p_out;
        END;
        //
    DELIMITER ;
    #调用
    SET @p_out=1;
    CALL out_param(@p_out);
    SELECT @p_out;

    IN a int // 调用时,a可以赋值,但不能返回
    OUT a int // 调用时,a无法赋值,但可以返回
    INOUT a int // 调用时,a可以赋值,也可以返回

    一、if - then - else语句

    二、while循环语句

    相关文章

      网友评论

          本文标题:存储过程(转)

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