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

  可以使用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');

  //

MySQL教程之存储过程与函数的更多相关文章

  1. MySQL中的存储过程和函数使用详解

    一.对待存储过程和函数的态度 在实际项目中应该尽量少用存储过程和函数,理由如下: 1.移植性差,在MySQL中的存储过程移植到sqlsever上就不一定可以用了. 2.调试麻烦,在db中报一个错误和在 ...

  2. MySQL基础值 存储过程和函数

    一.创建存储过程和函数 什么是创建存储过程和函数? 就是将经常使用的一组SQL语句组合在一起,并将这些SQL语句当做一个整体存储在MYSQL服务器中. 创建存储过程的语句是:CREATE  PROCE ...

  3. MySQL中的存储过程和函数

    存储过程和函数 简单的说,存储过程就是一条或者多条SQL语句的集合.可以视为批文件,但是其作用不仅仅局限于批处理.本文主要介绍如何创建存储过程和存储函数,以及如何调用.查看.修改.删除存储过程和存储函 ...

  4. MySQL存储过程和自定义函数、Navicat for mysql、创建存储过程和函数、调用存储过程和函数的区别

    1 MySQL存储过程和函数 过程和函数,它们被编译后保存在数据库中,称为持久性存储模块(Persistent Stored Module,PSM),可以反复调用,运行速度快. 1.1 存储过程 存储 ...

  5. MySQL中的存储过程、函数与触发器

    一.对待存储过程和函数的态度 优点: 1.存储过程只在创建时进行编译,sql语句则每次执行都需要编译.能提高数据库执行速度. 2.简单复杂操作结合事物一起封装. 3.复用性高. 4.安全性高,可指定存 ...

  6. <MySQL>入门七 存储过程和函数

    -- 存储过程和函数 /* 存储过程和函数:类似java中的方法 好处: 1.提高代码的重用性 2.简化操作 */ /* 存储过程 含义:一组预先编译好的SQL语句的集合.理解成批处理语句 1.提高代 ...

  7. Mysql变量、存储过程、函数、流程控制

    一.系统变量 系统变量: 全局变量 会话变量 自定义变量: 用户变量 局部变量 说明:变量由系统定义,不是用户定义,属于服务器层面 注意:全局变量需要添加global关键字,会话变量需要添加sessi ...

  8. MySql视图、存储过程、函数、索引

    一.视图 视图是查询命令结果构成的一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集合,并可以当作表来查询使用. 1创建视图 - ...

  9. 八、mysql视图、存储过程、函数以及时间调度器

    .create or replace view emp_view as select * from t4 ;给t4表创建一个名为emp_view的视图 .drop view emp_view 删除视图 ...

随机推荐

  1. UITableViewCell添加点击时改变字体的颜色、背景、图标

    改变字体颜色:cell.textLabel.highlightedTextColor 改变背景颜色:cell.selectedBackgroundView (必须是图片哦) 改变图标颜色:cell.i ...

  2. 系统中同时存在python2和python3时 pip有时候更新后会报错 解决安装的方法如下

    官网原链接:https://pip.pypa.io/en/stable/installing/ Installation Do I need to install pip? pip is alread ...

  3. archive log full ora-00257

    ############# sample 0 asmcmd show free 37G in archive_log ASMCMD> lsdgState Type Rebal Unbal Sec ...

  4. C++类成员函数与成员变量的内存布局

    一.成员函数 成员函数可以被看作是类作用域的全局函数,不在对象分配的空间里,只有虚函数才会在类对象里有一个指针,存放虚函数的地址等相关信息.

  5. 137 Single Number II 数组中除了一个数外,其他的数都出现了三次,找出这个只出现一次的数

    给定一个整型数组,除了一个元素只出现一次外,其余每个元素都出现了三次.求出那个只出现一次的数.注意:你的算法应该具有线性的时间复杂度.你能否不使用额外的内存来实现?详见:https://leetcod ...

  6. [在读]webkit技术内幕

    看了一点点,还不适合目前的我看,搁置.

  7. Centos 6.5安装MySQL-Python遇到的问题--解决办法一

    系统:CentOS release 6.5 (Final) MySQL版本:mysql  Ver 14.14 Distrib 5.7.19, for Linux (x86_64) using  Edi ...

  8. 使用真正的 Redux 和 React-redux

    现在 make-react-redux 工程代码中的 Redux 和 React-redux 都是我们自己写的,现在让我们来使用真正的官方版本的 Redux 和 React-redux. 在工程目录下 ...

  9. 关于Control.Dispatcher.BeginInvoke卡界面

    Control.Dispatcher.BeginInvoke里的逻辑由UI线程执行,如果内部包含耗时操作就会造成界面卡住. Action.BeginInvoke里的逻辑,将在一个新开的线程中执行,而不 ...

  10. jdk1.8新日期时间类(DateTime、LocalDateTime)demo代码

    //获取当前时间 LocalDateTime d0 = LocalDateTime.now(); System.out.println(DataConvertUtil.localDateTimeToS ...