MySQL教程之存储过程与函数

  存储程序分为存储过程和函数

  可以使用CALL来调用存储过程,只能输出变量返回值。存储过程可以调用其他存储过程

  函数可以从语句外调用,也能返回标量值

  什么是存储过程?

  简单的说,就是一组SQL语句集,功能强大,可以实现一些比较复杂的逻辑功能,类似于JAVA语言中的方法;

  ps:存储过程跟触发器有点类似,都是一组SQL集,但是存储过程是主动调用的,且功能比触发器更加强大,触发器是某件事触发后自动调用;

  存储过程的特性

  有输入输出参数,可以声明变量,有if/else, case,while等控制语句,通过编写存储过程,可以实现复杂的逻辑功能;

  函数的普遍特性:模块化,封装,代码复用;

  速度快,只有首次执行需经过编译和优化步骤,后续被调用可以直接执行,省去以上步骤;

  DELIMITER的使用

  mysql默认的结束符为;但是存储过程中可能出现多个分号导致结束。所以需要用这个关键字设置SQL语句结束符,使用完之后可以再改回来

  要避免使用,因为是mysql的转义字符

  一、存储过程的创建

  CREATE PROCEDURE sp_name ([proc_parameter[,...]])

  [characteristic ...] routine_body;

  sp_name:存储过程的名称

  proc_parameter:存储过程的参数列表

  routine_body:是SQL代码的内容(用BEGIN和END来表示SQL代码的开始和结束)

  proc_parameter格式如下:

  [ IN | OUT | INOUT ] param_name type

  IN表示输入参数,OUT表示输出参数,INOUT表示既可以输入也可以输出

  param_name参数的名称

  type参数的类型

  演示

  创建一个名为AvgFruitPrice的存储过程,返回所有水果的平均价格

  DELIMITER //

  create procedure AvgFruitPrice()

  begin

  select avg(f_price) as avgprice from fruits;

  end;

  //

  创建一个查看fruits表的存储过程

  DELIMITER //

  create procedure Proc()

  begin

  select * from fruits;

  end;

  //

  创建名称为CountProc的存储过程(将count(*)的结果放入参数param1中)

  DELIMITER //

  create procedure CountProc(out paraml int)

  begin

  select count(*) into param1 from fruits;

  end;无锡做人流 http://www.chnk120.com

  //

  二、函数的创建

  CREATE FUNCTION func_name ([func_parameter[,……]])

  RETURNS type

  [characteristic……] routine_body

  func_name:存储函数的名称

  func_parameter:存储过程的参数列表

  RETURNS type:表示函数返回数据的类型

  characteristic:指定存储函数的特性

  proc_parameter格式如下:

  [ IN | OUT | INOUT ] param_name type

  IN表示输入参数,OUT表示输出参数,INOUT表示既可以输入也可以输出

  param_name参数的名称

  type参数的类型

  如果存储函数的RETURN语句返回一个类型不同于函数的RETURNS子句中指定类型的值,返回值将被强制转为恰当的类型

  案例

  创建名为NameByZip的存储函数,返回select语句的查询结果,数值类型为字符串类型

  DELIMITER //

  create function NameByZip()

  returns varchar(50)

  return (select s_name from suppliers where s_call='48075');

  //

原文地址:https://www.cnblogs.com/djw12333/p/10894465.html