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代码快,还是传一个存储过程名字和几个参数快

原文地址:https://www.cnblogs.com/microtiger/p/7429117.html