MySQL:存储过程和函数
存储过程和函数
一、创建存储过程和函数
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:存储过程和函数的更多相关文章
- MYSQL存储过程和函数学习笔记
学至Tarena金牌讲师,金色晨曦科技公司技术总监沙利穆课程笔记的综合. 1. 什么是存储过程和函数 将SQL语句放入一个集合里,然后直接调用存储过程和函数来执行已经定义好的SQL语句,通过存储过程和 ...
- Paip.断点调试MYSQL存储过程跟函数的解决方案大法
Paip.断点调试MYSQL存储过程跟函数的解决方案大法 作者Attilax , EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http://blog.csdn ...
- Mysql存储过程和函数
Mysql存储过程和函数 基本概念: 创建存储过程和函数是指将经常使用的一组SQL语句的组合在一起,并将这些SQL语句当作一个整体存储在MySQL服务器中.例如,银行经常需要计算用户的利息.不同类别的 ...
- MySql存储过程与函数详解
存储过程和函数是在数据库中定义一些SQL语句的集合,然后直接调用这些存储过程和函数来执行已经定义好的SQL语句.存储过程和函数可以避免开发人员重复的编写相同的SQL语句.而且,存储过程和函数是在MyS ...
- Mysql - 存储过程/自定义函数
在数据库操作中, 尤其是碰到一些复杂一些的系统, 不可避免的, 会用到函数/自定义函数, 或者存储过程. 实际项目中, 自定义函数和存储过程是越少越好, 因为这个东西多了, 也是一个非常难以维护的地方 ...
- MySQL 存储过程和函数
概述 一提到存储过程可能就会引出另一个话题就是存储过程的优缺点,这里也不做讨论,一般别人问我我就这样回答你觉得它好你就用它.因为mysql中存储过程和函数的语法非常接近所以就放在一起,主要区别就是函数 ...
- Mysql 存储过程、函数、触发器和视图的权限检查
当存储过程.函数.触发器和视图创建后,不单单创建者要执行,其它用户也可能需要执行,换句话说,执行者有可能不是创建者本身,那么在执行存储过程时,MySQL是如何做权限检查的? 在默认情况下,MySQL将 ...
- Mysql 存储过程和函数区别
存储过程是procedure用户定义的一系列sql语句的集合,涉及特定表或其它对象的任务,用户可以调用存储过程,而函数通常是数据库已定义的方法,它接收参数并返回某种类型的值并且不涉及特定用户表. 存储 ...
- MySQL 存储过程和函数(转)
概述 一提到存储过程可能就会引出另一个话题就是存储过程的优缺点,这里也不做讨论,一般别人问我我就这样回答你觉得它好你就用它.因为mysql中存储过程和函数的语法非常接近所以就放在一起,主要区别就是函数 ...
- 7 MySQL存储过程和函数
目录: 1. 存储过程和函数概述2. 准备工作3. 存储过程操作4. 创建带参存储过程5. 查看存储过程 1. 存储过程和函数概述 MySQL的存储过程(stored procedure)和函数(st ...
随机推荐
- JDK常用工具
JDK的命令行工具 jps 查看正在使用的jvm机器进程号. 常用命令,-l显示正在运行的jar包或者软件(基于jvm),-v显示当前进程详细的jvm参数 jps -l jps -v javap 反汇 ...
- 【洛谷 P1216】【IOI1994】【USACO1.5】数字三角形 Number Triangles
(如此多的标签qaq) 数字三角形 Number Triangles[传送门] 本来打算当DP练的,没想到写着写着成递推了(汗) 好的没有时间了,我们附个ac代码(改天不写): #include< ...
- Sorting Algorithms
Merge sort by using recursive strategy, i.e. divide and conquer. def merge(left,right): result = [] ...
- docker实战系列之docker 端口映射错误解决方法
错误: Error response from daemon: Cannot start container web: iptables failed: iptables -t nat -A DOCK ...
- Oracle12c中容错&性能新特性之表空间组
1. 简介 表空间组可以使用户消耗来自多个表空间的临时表空间.表空间组有如下特点: 1) 至少包含一个表空间.表空间组中包含的最大表空间数没有限制. 2) 和表空间共 ...
- easyUI的form表单重复提交处理
1. 问题 生产环境出现过新增用户提交, 入库两条重复数据的情况; 但是我查看代码, 页面做了校验, 后台插入数据也做了校验; 出现这种几率的事件的非常小的, 但是还是会碰到, 客户会对我们的产品产 ...
- IDA 逆向工程 反汇编使用
IDA pro 7.0版本 from:freebuf 用到的工具有IDA pro 7.0 ,被反汇编的是百度云(BaiduNetdisk_5.6.1.2.exe). 首先,IDA pro的长相如下: ...
- 大量的QT控件及示例发放
QT属性控件项目https://github.com/lexxmark/QtnProperty 比特币交易软件https://github.com/JulyIGHOR/QtBitcoinTrader ...
- 在eclipse激活maven profile配置
profile简介 profile可以让我们定义一系列的配置信息,然后指定其激活条件.这样我们就可以定义多个profile,然后每个profile对应不同的激活条件和配置信息,从而达到不同环境使用不同 ...
- elasticsearch在CentOS环境下开机启动
验证环境,OS版本:CentOS-7-x86_64-Minimal-1708:ES版本:elasticsearch-6.2.2. 1.创建文件elasticsearch #!/bin/bash # # ...