存储过程和函数

一、创建存储过程和函数

1、创建存储过程

  • 语法:
CREATE
PROCEDURE sp_name ([proc_parameter[,...]])
[characteristic ...] routine_body
  • create procedure:存储的关键字
  • sp_name:存储过程的名字
  • proc_parameter:存储过程的参数列表characteristic存储过程的特性
    • 格式:

      • [ IN | OUT | INOUT ] param_name type
    • 介绍:
      • in----输入,out----输出,inout----可以输入也可以输出
      • param_name:参数名称
      • type:参数的类型(MySQL的任意类型)
  • routine_body sql的代码

【例】

mysql> delimiter //
mysql> create procedure guocheng() show databases;
-> //
Query OK, 0 rows affected (0.00 sec)
mysql> delimiter ; delimiter语句将结束符设置为//。
注意:
create procedure关键字
guocheng()过程名
show databases;函数hangshu()的作用:显示所有的数据库;
使用delimiter语句时,不要使用“/”;因为“/”是MySQL的转移符;

2、创建存储函数

  • 语法:
CREATE
FUNCTION sp_name ([func_parameter[,...]])
RETURNS type
[characteristic ...] routine_body
  • create function 存储函数的关键字
  • sp_name存储函数的名称
  • func_parameter存储过程的参数列表type-----函数返回的数据类型
    • 格式:

      • [ IN | OUT | INOUT ] param_name type
    • 介绍:
      • in----输入,out----输出,inout----可以输入也可以输出
      • param_name 参数名称
      • type 参数的类型(MySQL的任意类型)
  • routine_body sql的代码
  • characteristic存储过程的特性

【例】

mysql> delimiter //
mysql> create
-> function hangshu()
-> returns char(50)
-> return (select * from guke);
-> //
Query OK, 0 rows affected (0.00 sec)
mysql> delimiter ;

3、变量

  • 介绍变量

变量可以在子程序中声明并使用,这些变量的使用范围是begin……end程序中

  • 定义变量语法:
DECLARE var_name [, var_name] ... type [DEFAULT value]
  • 介绍赋值变量语法:

    • var_name 局部变量名称
    • type变量类型
    • DEFAULT value给变量提供一个默认值,默认值可以是常数,也可以是表达式,系统默认为空值
SET var_name=expr[,var_name=expr]……;

注意:不同的变量类型(局域声明变量及全局变量)可以被混合;
4、定义条件和处理程序

  • 定义条件

    • 语法:
DECLARE condition_name CONDITION FOR condition_value
condition_value:
SQLSTATE [VALUE] sqlstate_value| mysql_error_code
  • 介绍

    • condition_name 条件名字
    • condition_value 条件类型
    • sqlstate_value和 mysql_error_code表示MySQL的错误,使用这个语句需要它将一个名字和指定的错误条件 想关联起来
  • 定义处理程序
    • 语法
DECLARE handler_action HANDLER
FOR condition_value [, condition_value] ...
statement
  • 介绍

    • Statement:表示程序语句块
    • handler_action:表示错误处理方式
    • CONTINUE| EXIT| UNDO
    • CONTINUE:表示遇到错误不处理,继续执行
    • EXIT:表示遇到错误马上退出
    • UNDO:遇到错误回到前一次的操作,MySQL暂时不支持
    • condition_value:表示错误类型

5、光标的使用------光标只能在存储过程和函数中使用

  • 声明光标

    • 语法:declare 光标名 cursor for select语句内容
  • 打开光标
    • 语法:open 光标名
  • 使用光标
    • 语法:
    • fetch cursor_name into var_name[,var_name]……{参数名称}
      • 说明
      • cursor_name 光标名
      • var_name 表示将光标中的select语句查询出来的信息存入该参数中。
      • 【注意】
      • 必须在声明光标之前就定义好
  • 关闭光标
    • 语法:
    • close 光标名
      • 【注意】
      • 如果没有被明确地关闭,光标在它被声明的复合语句的末尾被关闭

6、流程控制的使用

  • if语句

    • 介绍:

      • 包含多个条件判断,根据判断结果为true或false执行相应的语句,与Java语句类似
    • 语法:
IF search_condition THEN statement_list
[ELSEIF search_condition THEN statement_list] ...
[ELSE statement_list]
END IF
  • case语句

    • 语法:
CASE case_value
WHEN when_value THEN statement_list
[WHEN when_value THEN statement_list] ...
[ELSE statement_list]
END CASE
    • 参数说明

      • case_value 表示条件判断的表达式,决定那个when语句执行
      • when_value表示表达式可能的值,如果when_value与case_value相等,则执行在then后 面的statement_list语句;
      • statement_list表示不同条件的执行语句,
  • loop语句

    • 介绍:

      • 循环语句重复执行语句
    • 语法:
[begin_label:] LOOP
statement_list
END LOOP [end_label]
    • 参数说明

      • begin_label:表示标注名称
      • statement_list:要循环的语句
  • leave语句
    • 介绍:

      • 退出循环
    • 语法:
      • LEAVE label
    • 参数说明:
      • Label:退出循环的要求
  • iterate语句
    • 介绍:

      • 将执行顺序转到语句段开头处
    • 语法:
      • ITERATE label
    • 参数说明
      • Label:开始循环的要求
    • 注意:
      • 只能用于LOOP、REPEAT和WHILE语句中
  • while语句
  • 介绍:
  • 带条件判断的循环过程,与repeat语句不同,先对指定的表达式进行判断,如果符合, 则开始循环,否则退出循环;
  • 语法:
[begin_label:] WHILE search_condition DO
statement_list
END WHILE [end_label]
  • 参数说明

    • begin_label:表示标注名称
    • search_condition条件表达式

二、调用存储过程和函数

1、调用存储过程

语法:

call 存储过程名字([存储过程的参数[,……]])

2、调用存储函数

语法:

select 存储函数名字([存储过程的参数[,……]])

三、查看存储过程和函数

1、使用show status语句查看存储过程和函数的状态

语法:

show {procedure|function}status[like’存储过程或存储函数的名称’]

注意:

显示:数据库、名字、类型、创建者、创建和修改日期

2、使用show create语句查看存储过程和函数的定义

语法:

show create{procedure|function}存储过程或存储函数的名称

3、从information_schema.Routines表查看存储过程和函数的信息

语法:

select * from information_schema.Routines
where routine_name=’存储过程或存储函数的名称’;

四、修改存储过程和函数

语法:

ALTER {procedure|function} 存储过程或存储函数的名称 [characteristic ...]
characteristic:
COMMENT 'string'
| LANGUAGE SQL
| { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
| SQL SECURITY { DEFINER | INVOKER }

五、删除存储过程和函数

语法:

DROP {PROCEDURE | FUNCTION} [IF EXISTS] sp_name

MySQL:存储过程和函数的更多相关文章

  1. MYSQL存储过程和函数学习笔记

    学至Tarena金牌讲师,金色晨曦科技公司技术总监沙利穆课程笔记的综合. 1. 什么是存储过程和函数 将SQL语句放入一个集合里,然后直接调用存储过程和函数来执行已经定义好的SQL语句,通过存储过程和 ...

  2. Paip.断点调试MYSQL存储过程跟函数的解决方案大法

    Paip.断点调试MYSQL存储过程跟函数的解决方案大法 作者Attilax ,  EMAIL:1466519819@qq.com  来源:attilax的专栏 地址:http://blog.csdn ...

  3. Mysql存储过程和函数

    Mysql存储过程和函数 基本概念: 创建存储过程和函数是指将经常使用的一组SQL语句的组合在一起,并将这些SQL语句当作一个整体存储在MySQL服务器中.例如,银行经常需要计算用户的利息.不同类别的 ...

  4. MySql存储过程与函数详解

    存储过程和函数是在数据库中定义一些SQL语句的集合,然后直接调用这些存储过程和函数来执行已经定义好的SQL语句.存储过程和函数可以避免开发人员重复的编写相同的SQL语句.而且,存储过程和函数是在MyS ...

  5. Mysql - 存储过程/自定义函数

    在数据库操作中, 尤其是碰到一些复杂一些的系统, 不可避免的, 会用到函数/自定义函数, 或者存储过程. 实际项目中, 自定义函数和存储过程是越少越好, 因为这个东西多了, 也是一个非常难以维护的地方 ...

  6. MySQL 存储过程和函数

    概述 一提到存储过程可能就会引出另一个话题就是存储过程的优缺点,这里也不做讨论,一般别人问我我就这样回答你觉得它好你就用它.因为mysql中存储过程和函数的语法非常接近所以就放在一起,主要区别就是函数 ...

  7. Mysql 存储过程、函数、触发器和视图的权限检查

    当存储过程.函数.触发器和视图创建后,不单单创建者要执行,其它用户也可能需要执行,换句话说,执行者有可能不是创建者本身,那么在执行存储过程时,MySQL是如何做权限检查的? 在默认情况下,MySQL将 ...

  8. Mysql 存储过程和函数区别

    存储过程是procedure用户定义的一系列sql语句的集合,涉及特定表或其它对象的任务,用户可以调用存储过程,而函数通常是数据库已定义的方法,它接收参数并返回某种类型的值并且不涉及特定用户表. 存储 ...

  9. MySQL 存储过程和函数(转)

    概述 一提到存储过程可能就会引出另一个话题就是存储过程的优缺点,这里也不做讨论,一般别人问我我就这样回答你觉得它好你就用它.因为mysql中存储过程和函数的语法非常接近所以就放在一起,主要区别就是函数 ...

  10. 7 MySQL存储过程和函数

    目录: 1. 存储过程和函数概述2. 准备工作3. 存储过程操作4. 创建带参存储过程5. 查看存储过程 1. 存储过程和函数概述 MySQL的存储过程(stored procedure)和函数(st ...

随机推荐

  1. Nim or not Nim? HDU - 3032

    题意:给定n堆石子,两人轮流操作,每次选一堆石子,取任意石子或则将石子分成两个更小的堆(非0),取得最后一个石子的为胜. 题解:比较裸的SG定理,用sg定理打表,得到表1,2,4,3,5,6,8,7, ...

  2. Numpy常用API

    目录 一.输入和输出 1.1 NumPy二进制文件(NPY,NPZ) 1.2 文本文件 1.3 正则表达式解析 1.4 原始二进制文件 1.5 内存映射文件 1.6 Base-n相关 1.7 数据源 ...

  3. python基础之字符串以及切片等操作

    1.字符类型 1.整型 int  2. str 字符串 3.bool 布尔值 4.list 表格,常用于大量数据的存储 用[ ]表示  5.tuple 元祖 ,不能发生改变()表示  6.dict 字 ...

  4. 重写TreeMap的compare方法处理配置表

    需要处理的配置表如下: 接上一篇的优化,接着优化,优化代码如下:  这段代码的关键在于重写TreeMap的compare方法. 关于如何重写TreeMap的compare方法,以及返回值代表的意义,可 ...

  5. shiro中INI配置

    4.1 根对象SecurityManager 从之前的Shiro架构图可以看出,Shiro是从根对象SecurityManager进行身份验证和授权的:也就是所有操作都是自它开始的,这个对象是线程安全 ...

  6. mysql半同步开启

    开启半同步复制 #在有的高可用架构下,master和slave需同时启动,以便在切换后能继续使用半同步复制 /etc/my.cnf plugin-load = "rpl_semi_sync_ ...

  7. HashSet和ArrayList有什么区别

    hashSet存储的是无序,不可重复,无索引 ArrayList存储的是有序,可重复,有索引

  8. [LeetCode] 108. Convert Sorted Array to Binary Search Tree ☆(升序数组转换成一个平衡二叉树)

    108. Convert Sorted Array to Binary Search Tree 描述 Given an array where elements are sorted in ascen ...

  9. [LeetCode] 110. Balanced Binary Tree ☆(二叉树是否平衡)

    Balanced Binary Tree [数据结构和算法]全面剖析树的各类遍历方法 描述 解析 递归分别判断每个节点的左右子树 该题是Easy的原因是该题可以很容易的想到时间复杂度为O(n^2)的方 ...

  10. 两个有序数组的中位数(第k大的数)

    问题:两个已经排好序的数组,找出两个数组合并后的中位数(如果两个数组的元素数目是偶数,返回上中位数). 感觉这种题目挺难的,尤其是将算法完全写对.因为当初自己微软面试的时候遇到了,但是没有想出来思路. ...