• Mysql存储过程和存储函数


    存储过程:一条或者多条sql语句

      创建存储过程 CREATE PROCEDURE

    CREATE PROCEDURE 存储过程名([proc_parameter])
    [characteristics] routime_body

        proc_parameter是指定存储过程的参数列表,可以这么写 [IN|OUT|INOUT] param_name type,IN输入参数,OUT输出参数,INOUT即可输入也可输入,param_name参数名 type参数类型

        characteristics表示存储过程的特性

        routime_body表示sql代码 用begin和end括起来

    CREATE PROCEDURE avgMonet(IN persionname VARCHAR(255),out sumMoney double)
    BEGIN
        select sum(personMoney) INTO sumMoney From person where name=persionname;
    END

    获取名叫persionname的所有数据行,然后把他们的工资全部加起来赋给sumMoney

      使用 CALL 来调用存储过程

    CALL sp_name(parameter1,parameter2,.....)

      输出变量的返回值

      在存储过程中我们可以使用declare来定义局部变量

    DECLARE var_name1[,var_name2,......] data_type [Default vaue]

        可以定义一个或者多个变量名

        可以赋值,也可以使用默认值(NULL),之后使用set来进行赋值

    DECLARE a1 int DEFAULT 1;
    DECLARE a1,a2,a3 int ;
    SET  a1=1,a2=2,a3=3;

    Select语句也能给Declare赋值

    存储函数:

      创建存储函数 CREATE FUNCTION

    CREATE FUNCTION func_name([func_parameter]) RETURNs type
    [characteristics] routime_body

      参数默认IN

      参数和存储过程意思一样但不用begin和end表示 用return

    CREATE FUNCTION nameById(persionid INT) RETURNS varchar(255)
    DETERMINISTIC 
    return(select name from person where id = persionid);
    DETERMINISTIC 不确定的,同样的还有
    NO SQL 没有SQl语句,当然也不会修改数据
    READS SQL DATA 只是读取数据,当然也不会修改数据
    MODIFIES SQL DATA 要修改数据
    CONTAINS SQL 包含了SQL语句
    function里面支持DETERMINISTIC, NO SQL 和 READS SQL DATA 

    ps.这里不加
    DETERMINISTIC会报错
    报错原因是 因为启用了bin-log
    然后查了查(还没有仔细去看) bin-log 大概理解就是数据库用来保存每一次操作的日志----->说白了就是害怕万一有一天某个人删库跑路了,通过bin-log的记录可以恢复数据


    通过引用函数名来使用

    select func_name;

    游标 

      当我们的查询语句 查询出了很多的结果,此时就需要我们在结果集中使用游标来读取记录,根据需要来获取其中的一条记录

    游标的定义

    DECLARE  cursor_name CURSOR FOR select_statement

    cursor_name 游标名 

    select_statement 查询结果集

    游标的使用

    FETCH cursor_name INTO var_name [, var_name,......]{参数名称}

    关闭游标

    FETCH cursor_name INTO var_name [, var_name,.....] {参数名称}

    查看存储过程存储函数状态

    SHOW {PROCEDURE | FUNCTION} STATUS [LIKE 'pattern']

    LIKE 'pattern' 匹配存储函数名称或者存储过程名称

    查看存储过程存储函数的定义

    SHOW CREATE {PROCEDURE| FUNCTION} sp_name

    删除存储过程和存储函数

    DROP {PROCEDURE | FUNCTION}[if exists] sp_name

    ---------------------------------还有许多不足的地方,会继续学习下去--------------------------------------------------

     

  • 相关阅读:
    setjmp()和longjmp()函数
    C语言过程活动记录
    【剑指Offer】字符串的排列
    python剑指offer系列二叉树中和为某一值的路径
    二叉搜索树的后续遍历
    如何设置学习率
    各种机器学习算法的优缺点(未完成)
    机器学习中梯度下降法和牛顿法的比较
    特征图大小的计算
    为什么L1稀疏,L2平滑?
  • 原文地址:https://www.cnblogs.com/fjd-1004/p/11031747.html
Copyright © 2020-2023  润新知