zoukankan      html  css  js  c++  java
  • mysql自定义函数语法

    创建函数

    DELIMITER $$
    DROP FUNCTION IF EXISTS `test` $$
    CREATE FUNCTION `test`(a int ,b int)
    RETURNS int 
    BEGIN
      IF (A>B) THEN
        RETURN a+b;
      ELSE
        RETURN a-b;
      END IF;
    END
    DELIMITER;

     创建存储过程

    DELIMITER $$
    DROP PROCEDURE IF EXISTS myProc $$
    CREATE PROCEDURE myProc()
    BEGIN
      DECLARE v_sex int;

      SELECT sex into v_sex from user where id=3;      // 取出sex 给 v_sex 赋值,select sex into v_sex //  SET vv=a+b; //赋值
      if(v_sex==0) THEN
        SELECT '男生';
      ELSE
        SELECT '女生';
      END IF;
    END

    DELIMTER;

    调用存储过程 call myProc();

    delimiter就是告诉mysql解释器,该段命令是否已经结束了,是否可以执行了。
    默认情况下,delimiter是分号;,遇到分号就执行。
    后面的双美元符号 就是告诉mysql,遇到双美元符号再执行

    show function status; // 查看自定义函数

    show procedure status; // 查看自定义存储过程

    输入输出参数

    DELIMITER $$
    DROP PROCEDURE IF EXISTS myReslt $$
    CREATE PROCEDURE myReslt (IN a INT , IN b INT, OUT c INT)  // in 输入参数,out输出参数
    BEGIN
    SET c=a+b;
    SELECT * FROM user WHERE id BETWEEN 2 AND c;
    END

    DELIMTER;

    call myReslt (2,3,@c);
    select @c;

    存储过程与自定义函数的区别:

    存储过程实现的过程要复杂一些,而函数的针对性较强;

    存储过程可以有多个返回值,而自定义函数只有一个返回值;

    存储过程一般独立的来执行,而函数往往是作为其他SQL语句的一部分来使用;

    存储过程存在的必要性(好处):


    存储过程说白了就是把经常使用的SQL语句或业务逻辑封装起来,预编译保存在数据库中,当需要的时候从数据库中直接调用,省去了编译的过程.

    提高了运行速度;

    同时降低网络数据传输量(你觉得传一堆SQL代码快,还是传一个存储过程名字和几个参数快

  • 相关阅读:
    java图片压缩处理
    RocketMQ启动broker提示 错误:找不到或无法加载主类
    Docker
    openresty (nginx+lua)实现请求过滤
    mybatis-3.4.0 Date类型非空字符串判断bug
    ClickHouse 官方文档
    Flume 搭建遇到的问题
    Hadoop与HDFS
    关于Linux
    mybatis insert 返回主键
  • 原文地址:https://www.cnblogs.com/microtiger/p/7429117.html
Copyright © 2011-2022 走看看