这里写自定义目录标题

  • 一 实验目的
  • 二 实验平台
  • 三 实验内容和要求
    • 3.1 创建存储过程
    • 3.2 查看存储过程
    • 3.3 修改存储过程
    • 3.4 删除存储过程
    • 3.5 创建函数
    • 3.6 查看函数
    • 3.7 删除函数

一 实验目的

  1. 掌握 MySQL 块结构、MySQL 的基本语法、MySQL 的流程控制语句;
  2. 掌握 MySQL 块中使用游标的方法;
  3. 掌握 MySQL 异常处理技术。
  4. 掌握存储过程、函数数据库对象的基本作用;
  5. 掌握存储过程、函数的建立、修改、查看、删除等操作

二 实验平台

  1. 操作系统: Windows 10;
  2. 数据库MySQL Server 8.0,MySQL Workbench

三 实验内容和要求

任务中涉及的数据表是在**员工医疗保险系统(实验 03)**中给出的表。

3.1 创建存储过程

  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;
  1. 创建一个存储过程“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);
  1. 创建一个存储过程“insert_pro”,该存储过程可以向员工表“staff”中插入
    员工信息;如果向员工表“staff”插入已经存在的员工编号,自定义异常处理,则显示自定义错误消息“MySQL 1062:该员工编号已存在”,否则显示“员工信息插入成功!”(注:Error: 1062 SQLSTATE: 23000 (ER_DUP_ENTRY))。该题选做!

3.2 查看存储过程

  1. 使用 MySQL 命令行或者 workbench(或者 Navicat for MySQL)查看员工医
    疗保险数据库中的所有存储过程的状态、以及创建存储过程的语句;
-- 3.2.1show procedure status where db='db_test_学号';
  1. 使用 MySQL 命令行或者 workbench(或者 Navicat for MySQL)从数据字典
    中查看员工医疗保险数据库中的所有存储过程
-- 3.2.2 不确定
SELECT * FROM information_schema.Routines
WHERE ROUTINE_NAME='db_test_学号' AND ROUTINE_TYPE='PROCEDURE';

3.3 修改存储过程

  1. 使用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 删除存储过程

  1. 使用 MySQL 命令行或者 workbench(或者 Navicat for MySQL)删除存储过
    程“sex_pro”。
drop procedure sex_pro
  1. 使用 MySQL 命令行或者 workbench(或者 Navicat for MySQL)删除存储过
    程“cno_pro”。
drop procedure cno_pro;

3.5 创建函数

  1. 使用 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 ';
  1. 使用 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;
  1. 使用 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;
  1. 使用 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 查看函数

  1. 使用 MySQL 命令行或者 workbench(或者 Navicat for MySQL)查看员工医
    疗保险数据库中的上面创建的所有函数的状态、以及创建函数的语句;
-- 3.6.1
show function status where db='db_test_学号';
  1. 使用 MySQL 命令行或者 workbench(或者 Navicat for MySQL)从数据字典
    中查看员工医疗保险数据库中的上面所创建的所有函数。
-- 3.6.2 不确定
SELECT * FROM information_schema.Routines
WHERE ROUTINE_NAME='db_test_学号' AND ROUTINE_TYPE='function';

3.7 删除函数

  1. 使用 MySQL 命令行或者 workbench(或者 Navicat for MySQL)删除函数
    “staff_fun”。
drop function if exists staff_fun;
  1. 使用 MySQL 命令行或者 workbench(或者 Navicat for MySQL)删除函数
    “card_fun”。
drop function if exists card_fun

MySQL实验七创建存储过程和函数相关推荐

  1. mysql创建存储过程及函数详解

    文章来源: 学习通http://www.bdgxy.com/ 目录 1. 存储过程 1.1. 基本语法 1.2 创建一个指定执行权限的存储过程 1.3?DELIMITER 的使用 2. 创建函数? 1 ...

  2. MySQL(视图、存储过程与函数、流程控制、触发器)

    第一章 视图 1 什么是视图 为了提高复杂的SQL语句的复用性和表的操作的安全性 ,MySQL数据库管理系统提高了视图特性,所谓视图,本质上是一种虚拟表,其内容与真实的表相似,包含一系列带有名称的列和 ...

  3. mysql的实验环境_第04 章 MYSQL实验环境创建

    第04 章 MYSQL实验环境创建 一.下载MY https://dev.mysql.com/downloads/file/?id=476476 1.1 Oracle http://www.oracl ...

  4. 数据库实验七:存储过程实验

    数据库实验七:存储过程实验 233333,实验八的时候总感觉好像实验七计算的公式不太对,懒得改了就这样吧2333 定义一个存储过程proc2,更新给定订单的(含税折扣价)的总价,执行这个存储过程. 定 ...

  5. MYSQL中如何创建存储过程和存储函数(上篇)

    存储程序分为存储过程和存储函数.在MySQL中创建存储过程和存储函数的语句分别是create procedure 和create function.使用call语句来调用存储过程,只能用输出变量返回值 ...

  6. MySQL——创建存储过程和函数

    简单地说,存储过程就是一条或多条  SQL  语句的集合,可视为批文件,但是其作用不仅限于批处理.存储程序可以分为存储过程和函数.存储过程要用 CALL  语句来调用,并且只能用输出变量返回值. 1. ...

  7. MySQL(8)存储过程和函数

    字段名   数据类型 主键 外键 非空 唯一 自增 id  INT  是   否    是    是  否 name VARCHAR(50)  否   否    是    否  否 glass   V ...

  8. mysql create procedure_MySQL创建存储过程(CREATE PROCEDURE)

    MySQL 存储过程是一些 SQL 语句的集合,比如有的时候我们可能需要一大串的 SQL 语句,或者说在编写 SQL 语句的过程中还需要设置一些变量的值,这个时候我们就完全有必要编写一个存储过程.下面 ...

  9. mysql基础——变量、存储过程和函数

    目录 一.变量 1.1  基本介绍 1.2  系统变量 1.3  自定义变量 二.存储过程 2.1  基本介绍 2.2  存储过程的创建 2.3  存储过程的删除 2.4  存储过程的查看 2.5  ...

最新文章

  1. idea无法搜索插件问题解决
  2. 按字符串长度切割字符串(支持汉字占2个长度)
  3. 接到一个新需求:手机照片视频存储及备份需求整理及分析
  4. C语言 用typedef定义类型
  5. Oracle之AUTHID CURRENT_USER
  6. TreeSet()详解
  7. 前端学习(2718):重读vue电商网站38之通过input输入框优化
  8. 云南林业计算机单招试题,2016年云南林业职业技术学院单招的模拟题含解析-.docx...
  9. java 字符串是否包含字符串_在Java中,如何检查字符串是否包含子字符串(忽略大小写)?...
  10. OpenCV入门及应用案例:手把手教你做DNN图像分类
  11. Hibernate的持久化
  12. 临界区设计太大或太小有何缺点_空压机100课之016:离心式压缩机的结构、原理及优缺点...
  13. freemark判断传过来的值为空和不为空及问号、感叹号用法
  14. 并操作、差操作、广义积操作
  15. ubuntu 環境下 bochs 的安裝
  16. 有什么简单办法从格式复杂的 Excel中提取数据
  17. 配置maven的settings文件
  18. java opencv dct 压缩_使用OpenCV计算DCT
  19. 建站百科|全网最全、最系统的域名申请教程,不看吃亏!!!
  20. 第五章 Spanning Tree协议安全攻防

热门文章

  1. 在vue中使用rules对表单字段进行验证
  2. 2020年3月6日,部分iPhone无法连接到App Store 解决办法
  3. 远程桌面连接 出现身份验证错误 CredSSP 解决办法
  4. python爬取交通违法记录查询_如何查询已交罚款的交通违法记录
  5. 人工智能+停车对于建设智慧城市而言是非常重要的一方面
  6. openstack导出实例,制作镜像
  7. 永远的08计算机☆zsy☆
  8. 决策树与回归树区别到底在哪
  9. 查看服务器端口是否开放
  10. 云备份和恢复的优缺点