SQL(四) 游标实验、存储过程、函数实验

1.将视图实验中score表中的数据通过以下命令复制到新建的表score_copy中,然后通过带有游标的存储过程对成绩按下面的规则进行更新:80~100,更改为5;60~80,更改为3;低于60分更新为0。

Create table score_copy as select * from score;
DELIMITER //
CREATE PROCEDURE update_scores()
BEGINDECLARE done INT DEFAULT FALSE;DECLARE s_id INT;DECLARE s_score INT;DECLARE cur CURSOR FOR SELECT score_id, grade FROM score_copy;DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;OPEN cur;read_loop: LOOPFETCH cur INTO s_id,s_score;IF done THENLEAVE read_loop;END IF;IF s_score >= 80 AND s_score <= 100 THENUPDATE score_copy SET grade = 5 WHERE score_id = s_id;ELSEIF s_score >= 60 AND s_score < 80 THENUPDATE score_copy SET grade = 3 WHERE score_id = s_id;ELSEUPDATE score_copy SET grade = 0 WHERE score_id = s_id;END IF;END LOOP;CLOSE cur;
END//DELIMITER ;
CALL update_scores();
SELECT * FROM score_copy;

2.

将视图实验中score表中每个学生得最高分的元组加入score_max(结构score)表中。score_max建表命令如下:

Create table score_max as select * from score where 1=2;

特别提示:要求编写存储过程后,用call命令调用过程,并用select命令显示scoremax表中的内容。

Create table score_max as select * from score where 1=2;
DELIMITER //CREATE PROCEDURE insert_max_scores()
BEGINDECLARE done INT DEFAULT FALSE;DECLARE s_id INT;DECLARE s_sno VARCHAR(10);DECLARE s_cno VARCHAR(10);DECLARE s_score VARCHAR(10);DECLARE s_max_score VARCHAR(10);DECLARE cur CURSOR FOR SELECT score_id,sno,cno,grade FROM score;DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;OPEN cur;read_loop: LOOPFETCH cur INTO s_id,s_sno,s_cno,s_score;IF done THENLEAVE read_loop;END IF;select max(grade) into s_max_score from score where sno=s_sno;IF s_score = s_max_score THENINSERT INTO score_max(score_id,sno,cno,grade) VALUES (s_id,s_sno,s_cno,s_max_score);END IF;END LOOP;CLOSE cur;
END//DELIMITER ;CALL insert_max_scores();
SELECT * FROM score_max;

3.

库中有表fibonacci,用来储存斐波拉契数列的前n项(Fibonacci表结构说明)

列名

类型

说明

n

int

斐波拉契数列的第n项,主码

fibn

bigint

第n项的值

斐波拉契数列的前5项为:0,1,1,2,3推导公式为:fib(n) = fib(n-1) + fib(n-2)。

请创建存储过程sp_fibonacci(in m int),向表fibonacci插入斐波拉契数列的前m项,及其对应的斐波拉契数。fibonacci表初始值为一张空表。保证你的存储过程可以多次运行而不出错。

(斐波拉契数列的第一项索引号设为0,第二项为1,以此类推。测试时设置参数m为9)。

delimiter //
drop procedure sp_fibonacci;
create procedure sp_fibonacci(in m int)
beginDECLARE i INT DEFAULT 0;DECLARE n1 BIGINT DEFAULT 0;DECLARE n2 BIGINT DEFAULT 1;DECLARE temp BIGINT;truncate table fibonacci;INSERT INTO fibonacci (n, fibn) VALUES (0, 0);INSERT INTO fibonacci (n, fibn) VALUES (1, 1);SET i = 2;WHILE i < m DOSET temp = n1 + n2;SET n1 = n2;SET n2 = temp;INSERT INTO fibonacci (n, fibn) VALUES (i, temp);SET i = i + 1;END WHILE;
END //
DELIMITER ;
CALL sp_fibonacci(9);
select *from fibonacci;

4.

设有基于图书馆数据库的4个基本表:

图书(书号,书名,作者,出版社,单价)

读者(读者号,姓名,性别,办公电话,部门,读者类别编号)

借阅(读者号,书号,借出日期,归还日期)

读者类别(读者类别编号,读者类别,允许借阅册数,允许借阅天数)

编写存储过程实现:根据读者号查询该读者的图书借阅的册数。(采用读者号“1205021”测试)

DELIMITER //
CREATE PROCEDURE checkBorrowLimit(IN in_reader_id VARCHAR(50), OUT out_result VARCHAR(20))
BEGINDECLARE borrowed_count INT;DECLARE allowed_count INT;SELECT COUNT(*) INTO borrowed_count FROM 借阅 WHERE 读者号 = in_reader_id;SELECT 允许借阅册数 INTO allowed_count FROM 读者类别 WHERE 读者类别编号 = (SELECT 读者类别编号 FROM 读者 WHERE 读者号 = in_reader_id);IF borrowed_count < allowed_count THENSET out_result = '可以继续借阅';ELSESET out_result = '不可以继续借阅';END IF;
END//
DELIMITER ;
SET @result ='0';
CALL checkBorrowLimit('1205021', @result);
SELECT @result;

5.

设有基于图书馆数据库的4个基本表:

图书(书号,书名,作者,出版社,单价)

读者(读者号,姓名,性别,办公电话,部门,读者类别编号)

借阅(读者号,书号,借出日期,归还日期)

读者类别(读者类别编号,读者类别,允许借阅册数,允许借阅天数)

编写存储过程实现:

读者借阅图书时,需要查询是否超出允许借阅册数,如果超出则不能继续借阅图书,

试创建存储过程完成此查询功能。(提示:输入参数:读者号;输出:"可以继续借阅"或"不可以继续借阅",

使用读者号“1205021”测试)

DELIMITER //
CREATE PROCEDURE checkBorrowLimit(IN in_reader_id VARCHAR(50), OUT out_result VARCHAR(20))
BEGINDECLARE borrowed_count INT;DECLARE allowed_count INT;SELECT COUNT(*) INTO borrowed_count FROM 借阅 WHERE 读者号 = in_reader_id;SELECT 允许借阅册数 INTO allowed_count FROM 读者类别 WHERE 读者类别编号 = (SELECT 读者类别编号 FROM 读者 WHERE 读者号 = in_reader_id);IF borrowed_count < allowed_count THENSET out_result = '可以继续借阅';ELSESET out_result = '不可以继续借阅';END IF;
END//
DELIMITER ;
SET @result ='0';
CALL checkBorrowLimit('1205021', @result);
SELECT @result;

6.

用create function语句创建符合以下要求的函数:依据读者号计算其所借图书数量。

函数名为:get_borrow_num。使用读者号“1205021”测试结果。

set global log_bin_trust_function_creators=1;
drop function IF EXISTS get_borrow_num;
delimiter $$
create function get_borrow_num(读者号 varchar(50))
returns int
begindeclare borrow_num int;select count(*) into borrow_num from 借阅 where 借阅.读者号 = 读者号;return borrow_num;
end$$
delimiter ;
select get_borrow_num('1205021');

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/61204.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

TypeORM在Node.js中的高级应用

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 TypeORM在Node.js中的高级应用 TypeORM在Node.js中的高级应用 TypeORM在Node.js中的高级应用 引言 TypeORM 基本概念 1. 实体&am…

11.15组会汇报

概述 不经意传输协议,也叫茫然传输协议,是一种保护隐私的两方通信协议,消息发送者持有两条待发送的消息,接收者选择一条进行接收,事后发送者对接收者获取哪一条消息毫不知情,接收者对于未选择的消息也无法获取任何信息。即1-out-of-2 OT。在OT协议中,发送方拥有全部的数据权限,…

通过华为鲲鹏认证发行上市的集成平台产品推荐

华为鲲鹏认证是技术实力与品质的权威象征&#xff0c;代表着产品达到了高标准的要求。从技术层面看&#xff0c;认证确保产品与华为鲲鹏架构深度融合&#xff0c;能充分释放鲲鹏芯片的高性能、低功耗优势&#xff0c;为集成平台的高效运行提供强大动力。在安全方面&#xff0c;…

基于ARM+FPGA的电力通信管理机IEC61850规约通信机的实现

本章通过对比传统的通信管理机方案对需要支持多RS485端口的不足之处&#xff0c; 以及在进行海量数据处理时的性能瓶颈&#xff0c;本文使用Intel全新的Cyclone V SoC FPGA芯片&#xff0c;充分发挥FPGA的高速并行运算特性以及现场可配置优势&#xff0c;并且结合 ARM处理器的…

ASP.NET Core Webapi 返回数据的三种方式

ASP.NET Core为Web API控制器方法返回类型提供了如下几个选择&#xff1a; Specific type IActionResult ActionResult<T> 1. 返回指定类型&#xff08;Specific type&#xff09; 最简单的API会返回原生的或者复杂的数据类型&#xff08;比如&#xff0c;string 或者…

ROS机器视觉入门:从基础到人脸识别与目标检测

前言 从本文开始&#xff0c;我们将开始学习ROS机器视觉处理&#xff0c;刚开始先学习一部分外围的知识&#xff0c;为后续的人脸识别、目标跟踪和YOLOV5目标检测做准备工作。我采用的笔记本是联想拯救者游戏本&#xff0c;系统采用Ubuntu20.04&#xff0c;ROS采用noetic。 颜…

Bufferevent and evbuffer

每个bufferevent都有一个输入缓冲区和一个输出缓冲区&#xff0c;它们的类型都是“struct evbuffer”。有数据要写入到bufferevent时&#xff0c;添加数据到输出缓冲区&#xff1b;bufferevent中有数据供读取的时候&#xff0c;从输入缓冲区抽取&#xff08;drain&#xff09;数…

DQN代码详解

代码链接见文末 1. 任务描述 任务目标: 在 MountainCar-v0 环境中,智能体的目标是尽可能快地将一辆小车从山谷的一端(起始位置)驾驶到山谷的另一端(目标位置),通过学习如何利用环境中的动力学来实现目标。智能体只能施加力量(加速)来推动小车,且受到物理规律的限制…

pip/conda install bugs汇总

DNSResolutionError 一直不行&#xff0c;惯防火墙还是不行&#xff0c;可能导致漏洞了&#xff1b; 解决方案&#xff1a; reboot下次try可以刷新DNS缓存: resolvectl flush-cachespip._vendor.urllib3.exceptions.ReadTimeoutError: HTTPSConnectionPool(host‘mirrors.a…

主机型入侵检测系统(HIDS)——Elkeid在Centos7的保姆级安装部署教程

一、HIDS简介 主机型入侵检测系统(Host-based Intrusion Detection System 简称:HIDS);HIDS作为主机的监视器和分析器,主要是专注于主机系统内部(监视系统全部或部分的动态的行为以及整个系统的状态)。 HIDS使用传统的C/S架构,只需要在监测端安装agent即可,且使用用户…

Django启用国际化支持(2)—实现界面内切换语言:activate()

文章目录 ⭐注意⭐1. 配置项目全局设置&#xff1a;启用国际化2. 编写视图函数3. 配置路由4. 界面演示5、扩展自动识别并切换到当前语言设置语言并保存到Session设置语言并保存到 Cookie ⭐注意⭐ 以下操作依赖于 Django 项目的国际化支持。如果你不清楚如何启用国际化功能&am…

软件工程-需求分析与设计-更新中-1.0版

前言: 感觉书本上和线上课程, 讲的太抽象, 不好理解, 但软件开发不就是为了开发应用程序吗?! 干嘛搞这么抽象,对吧, 下面是个人对于软件开发的看法, 结合我的一些看法, 主打简单易懂, 当然,我一IT界小菜鸟, 对软件开发的认识也很浅显, 这个思维导图也仅仅是现阶段我的看…

Springboot之登录模块探索(含Token,验证码,网络安全等知识)

简介 登录模块很简单&#xff0c;前端发送账号密码的表单&#xff0c;后端接收验证后即可~ 淦&#xff01;可是我想多了&#xff0c;于是有了以下几个问题&#xff08;里面还包含网络安全问题&#xff09;&#xff1a; 1.登录时的验证码 2.自动登录的实现 3.怎么维护前后端…

Vue3 虚拟列表组件库 virtual-list-vue3 的使用

Vue3 虚拟列表组件库 virtual-list-vue3 的基本使用 分享个人写的一个基于 Vue3 的虚拟列表组件库&#xff0c;欢迎各位来进行使用与给予一些更好的建议&#x1f60a; 概述&#xff1a;该组件组件库用于提供虚拟化列表能力的组件&#xff0c;用于解决展示大量数据渲染时首屏渲…

http常⻅请求头和响应头详细讲解(笔记)

http常⻅请求头状态码 简介&#xff1a;讲解http常⻅见的请求⽅方法和使⽤用 http1.0定义了了三种&#xff1a;GET: 向服务器器获取资源&#xff0c;⽐比如常⻅见的查询请求POST: 向服务器器提交数据⽽而发送的请求Head: 和get类似&#xff0c;返回的响应中没有具体的内容&am…

(33)iptables设置防火墙策略常用命令(docker环境、非docker环境)

#普通环境&#xff08;非docker&#xff09; # 拒绝所有对端口 31001 的访问 iptables -A INPUT -p tcp --dport 31001 -j DROP # 允许 IP 地址 20.59.30.77 访问端口 31001 (此处用的是虚拟机 所以要使用nat地址的网关) iptables -I INPUT 1 -p tcp -s 20.59.30.77 --dpor…

【嵌入式】关于push老仓库到新仓库的方法

1. 背景 公司项目经常会有需要从开源项目中镜像代码过来的活,所以常常会在自己的服务器上创建一个对应的仓库,然后使用命令将期push过去。为方便日后抄命令,这里记录一下使用的命令。 2. 操作步骤 2.1. 已下载的代码push 特别提醒: 使用此脚本前请确保你修改的代码已保存…

利用云计算实现高效的数据备份与恢复策略

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 利用云计算实现高效的数据备份与恢复策略 利用云计算实现高效的数据备份与恢复策略 利用云计算实现高效的数据备份与恢复策略 引…

基于 PyTorch 从零手搓一个GPT Transformer 对话大模型

一、从零手实现 GPT Transformer 模型架构 近年来&#xff0c;大模型的发展势头迅猛&#xff0c;成为了人工智能领域的研究热点。大模型以其强大的语言理解和生成能力&#xff0c;在自然语言处理、机器翻译、文本生成等多个领域取得了显著的成果。但这些都离不开其背后的核心架…

SpringCloud多机部署,负载均衡-LoadBalance

一.负载均衡 1.1问题描述 //根据应用名称获取服务列表 List<ServiceInstance> instancesdiscoveryClient.getInstances("product-service"); //一个微服务可能有多个实例&#xff0c;获取第一个 EurekaServiceInstance instance(EurekaServiceInstance)insta…