MySQL实验七创建存储过程和函数
这里写自定义目录标题
- 一 实验目的
- 二 实验平台
- 三 实验内容和要求
- 3.1 创建存储过程
- 3.2 查看存储过程
- 3.3 修改存储过程
- 3.4 删除存储过程
- 3.5 创建函数
- 3.6 查看函数
- 3.7 删除函数
一 实验目的
- 掌握 MySQL 块结构、MySQL 的基本语法、MySQL 的流程控制语句;
- 掌握 MySQL 块中使用游标的方法;
- 掌握 MySQL 异常处理技术。
- 掌握存储过程、函数数据库对象的基本作用;
- 掌握存储过程、函数的建立、修改、查看、删除等操作
二 实验平台
- 操作系统: Windows 10;
- 数据库MySQL Server 8.0,MySQL Workbench
三 实验内容和要求
任务中涉及的数据表是在**员工医疗保险系统(实验 03)**中给出的表。
3.1 创建存储过程
- 使用 MySQL 命令行或者 workbench(或者 Navicat for MySQL)为员工医疗
保险系统(实验 03 创建的 7 个表)创建存储过程“sex_pro”,通过传入参数传入性
别(男或女),显示员工表“staff”中不同性别的员工人数。并调用该存储过程,测试
运行结果。
-- 3.1.1
delimiter //
create procedure sex_pro(in sex char,out num int)
beginset num = (select count(*) from staff where ssex=(sex));
end;
call sex_pro('男',@num);
select @num;
- 创建一个存储过程“cno_pro”,通过输入医保卡号,输出该医保卡的全部
消费信息。并调用该存储过程,测试运行结果。
-- 3.1.2
delimiter //
create procedure cno_pro(in cno char)
beginselect * from consume where cno = (cno);
end;
call cno_pro();
-- 测试2题
delimiter //
create procedure aaa(in cno char)
beginselect * from staff where sno = (cno);
end;
call aaa(1);
- 创建一个存储过程“insert_pro”,该存储过程可以向员工表“staff”中插入
员工信息;如果向员工表“staff”插入已经存在的员工编号,自定义异常处理,则显示自定义错误消息“MySQL 1062:该员工编号已存在”,否则显示“员工信息插入成功!”(注:Error: 1062 SQLSTATE: 23000 (ER_DUP_ENTRY))。该题选做!
3.2 查看存储过程
- 使用 MySQL 命令行或者 workbench(或者 Navicat for MySQL)查看员工医
疗保险数据库中的所有存储过程的状态、以及创建存储过程的语句;
-- 3.2.1show procedure status where db='db_test_学号';
- 使用 MySQL 命令行或者 workbench(或者 Navicat for MySQL)从数据字典
中查看员工医疗保险数据库中的所有存储过程
-- 3.2.2 不确定
SELECT * FROM information_schema.Routines
WHERE ROUTINE_NAME='db_test_学号' AND ROUTINE_TYPE='PROCEDURE';
3.3 修改存储过程
- 使用MySQL命令行或者workbench(或者Navicat for MySQL)修改存储过程
“sex_pro”,通过输入参数传入性别(男或女),通过输出参数得到员工表“staff”中不
同性别的员工人数,并执行该存储过程,显示员工表“staff”中不同性别的员工人数。
-- 3.3.1
-- ALTER {PROCEDURE | FUNCTION}……语句只能改变存储过程的特征,
-- 不能修改过程的参数以及过程体。如果想做这样的修改,
-- 必须先使用DROP PROCEDURE 删除过程,然后使用and CREATE PROCEDURE重建过程。
drop procedure sex_pro;
delimiter //
create procedure sex_pro(in sex char,out num int)
beginif sex='男' thenset num = (select count(*) from staff where ssex='女');end if;if sex='女' then set num = (select count(*) from staff where ssex='男');end if;
end;
call sex_pro('女',@num);
select @num;
3.4 删除存储过程
- 使用 MySQL 命令行或者 workbench(或者 Navicat for MySQL)删除存储过
程“sex_pro”。
drop procedure sex_pro
- 使用 MySQL 命令行或者 workbench(或者 Navicat for MySQL)删除存储过
程“cno_pro”。
drop procedure cno_pro;
3.5 创建函数
- 使用 MySQL 命令行或者 workbench(或者 Navicat for MySQL)创建函数
“num_fun”,该函数可以计算 1+3+5+7+9+……+N,其中 N 位任意的正整数;并调
用该函数,测试运行结果。
-- 3.5.1
delimiter //
create function num_fun(last_num int) returns int
begin declare js int;declare i int;set i = 1;set js = 0;while i<=last_num doset js=js+i;set i=i+2;end while;return js;
end
//
select num_fun(9);
drop function if exists num_fun
-- This function has none of DETERMINISTIC, NO SQL解决办法
show variables like 'log_bin_trust_function_creators';
set global log_bin_trust_function_creators = 1 ;
show variables like ' log_bin_trust_function_creators ';
- 使用 MySQL 命令行或者 workbench(或者 Navicat for MySQL)在员工医疗
保险系统(实验 03 创建的 7 个表)数据库中创建函数“card_fun”,通过传入参数
传入医保类型(企业、事业或是灵活就业),返回医保卡表“card”中该类型的医保卡
数量,并调用该函数,测试运行结果。
-- 3.5.2
delimiter //
create function card_fun(YBtype char(10)) returns int
begin return (select count(*) from card where ctype=(YBtype));
end
//
select card_fun('企业');
drop function if exists card_fun;
- 使用 MySQL 命令行或者 workbench(或者 Navicat for MySQL)在员工医疗
保险系统(实验 03 创建的 7 个表)数据库中创建函数“staff_fun”,通过传入参数
传入员工的编号,根据传入的员工编号,检查该员工是否存在。如果存在,则返
回 TRUE,否则返回 FALSE,并调用该函数,测试运行结果。
-- 3.5.3 不完善
delimiter //
create function staff_fun(insno int) returns boolean
begin if (select count(sno) from staff where sno=(insno))=0 thenreturn false;else return true;end if;
end
//
select staff_fun(22);
drop function if exists staff_fun;
- 使用 MySQL 命令行或者 workbench(或者 Navicat for MySQL)在员工医疗
保险系统(实验 03 创建的 7 个表)数据库中创建函数“sex_fun”,利用传入参数传
入性别(男或女),返回员工表“staff”中不同性别的员工人数,并调用该函数,注意
比较与存储过程“sex_pro”的差别。
-- 3.5.4
delimiter //
create function sex_fun(insex char)returns int
begindeclare num int;if insex='男' thenset num = (select count(*) from staff where ssex='男');end if;if insex='女' then set num = (select count(*) from staff where ssex='女');end if;return num;
end;
select sex_fun('男');
drop function if exists sex_fun;
3.6 查看函数
- 使用 MySQL 命令行或者 workbench(或者 Navicat for MySQL)查看员工医
疗保险数据库中的上面创建的所有函数的状态、以及创建函数的语句;
-- 3.6.1
show function status where db='db_test_学号';
- 使用 MySQL 命令行或者 workbench(或者 Navicat for MySQL)从数据字典
中查看员工医疗保险数据库中的上面所创建的所有函数。
-- 3.6.2 不确定
SELECT * FROM information_schema.Routines
WHERE ROUTINE_NAME='db_test_学号' AND ROUTINE_TYPE='function';
3.7 删除函数
- 使用 MySQL 命令行或者 workbench(或者 Navicat for MySQL)删除函数
“staff_fun”。
drop function if exists staff_fun;
- 使用 MySQL 命令行或者 workbench(或者 Navicat for MySQL)删除函数
“card_fun”。
drop function if exists card_fun
MySQL实验七创建存储过程和函数相关推荐
- mysql创建存储过程及函数详解
文章来源: 学习通http://www.bdgxy.com/ 目录 1. 存储过程 1.1. 基本语法 1.2 创建一个指定执行权限的存储过程 1.3?DELIMITER 的使用 2. 创建函数? 1 ...
- MySQL(视图、存储过程与函数、流程控制、触发器)
第一章 视图 1 什么是视图 为了提高复杂的SQL语句的复用性和表的操作的安全性 ,MySQL数据库管理系统提高了视图特性,所谓视图,本质上是一种虚拟表,其内容与真实的表相似,包含一系列带有名称的列和 ...
- mysql的实验环境_第04 章 MYSQL实验环境创建
第04 章 MYSQL实验环境创建 一.下载MY https://dev.mysql.com/downloads/file/?id=476476 1.1 Oracle http://www.oracl ...
- 数据库实验七:存储过程实验
数据库实验七:存储过程实验 233333,实验八的时候总感觉好像实验七计算的公式不太对,懒得改了就这样吧2333 定义一个存储过程proc2,更新给定订单的(含税折扣价)的总价,执行这个存储过程. 定 ...
- MYSQL中如何创建存储过程和存储函数(上篇)
存储程序分为存储过程和存储函数.在MySQL中创建存储过程和存储函数的语句分别是create procedure 和create function.使用call语句来调用存储过程,只能用输出变量返回值 ...
- MySQL——创建存储过程和函数
简单地说,存储过程就是一条或多条 SQL 语句的集合,可视为批文件,但是其作用不仅限于批处理.存储程序可以分为存储过程和函数.存储过程要用 CALL 语句来调用,并且只能用输出变量返回值. 1. ...
- MySQL(8)存储过程和函数
字段名 数据类型 主键 外键 非空 唯一 自增 id INT 是 否 是 是 否 name VARCHAR(50) 否 否 是 否 否 glass V ...
- mysql create procedure_MySQL创建存储过程(CREATE PROCEDURE)
MySQL 存储过程是一些 SQL 语句的集合,比如有的时候我们可能需要一大串的 SQL 语句,或者说在编写 SQL 语句的过程中还需要设置一些变量的值,这个时候我们就完全有必要编写一个存储过程.下面 ...
- mysql基础——变量、存储过程和函数
目录 一.变量 1.1 基本介绍 1.2 系统变量 1.3 自定义变量 二.存储过程 2.1 基本介绍 2.2 存储过程的创建 2.3 存储过程的删除 2.4 存储过程的查看 2.5 ...
最新文章
- idea无法搜索插件问题解决
- 按字符串长度切割字符串(支持汉字占2个长度)
- 接到一个新需求:手机照片视频存储及备份需求整理及分析
- C语言 用typedef定义类型
- Oracle之AUTHID CURRENT_USER
- TreeSet()详解
- 前端学习(2718):重读vue电商网站38之通过input输入框优化
- 云南林业计算机单招试题,2016年云南林业职业技术学院单招的模拟题含解析-.docx...
- java 字符串是否包含字符串_在Java中,如何检查字符串是否包含子字符串(忽略大小写)?...
- OpenCV入门及应用案例:手把手教你做DNN图像分类
- Hibernate的持久化
- 临界区设计太大或太小有何缺点_空压机100课之016:离心式压缩机的结构、原理及优缺点...
- freemark判断传过来的值为空和不为空及问号、感叹号用法
- 并操作、差操作、广义积操作
- ubuntu 環境下 bochs 的安裝
- 有什么简单办法从格式复杂的 Excel中提取数据
- 配置maven的settings文件
- java opencv dct 压缩_使用OpenCV计算DCT
- 建站百科|全网最全、最系统的域名申请教程,不看吃亏!!!
- 第五章 Spanning Tree协议安全攻防