使用sql语句完成任务:(一)存储函数的创建与使用 1.定义一个函数,计算两个数的最大公约数。 a) 输入两个整数。 b) 输出最大公约数。 c) 请用两种不同的方法实现gcd1()和gcd2()。 d) 调用c)中的两个函数,查找45和18的最大公约数。 e) 提示:可以通过辗转相除法找到两个数的最大公约数,流程图6-1如下。 图 6 1最大公约数流程图 2.课程的评分通常分为百分制和等级制。创建存储函数do_convert(),实现其转换,要求: a) 输入指定百分制成绩。 b) 输出对应的等级制成绩。 c) 转换规则,如果>=90分则为优秀,80-90(包含80)为良好,70-80(包含70)为中等,60-70(包含60)为及格,否则为不及格。 d) 查询该函数是否创建成功。 e) 使用d)中的函数,查询A课程学生的等级成绩,查询输出如下。 输出如下: 学生学号 学生姓名 学生班级号 等级制成绩 (二)触发器的创建与使用 1.使用触发器实现单列取值的范围约束。要求tbl_student学生表的生日字段要么为空,要么必须大于等于‘1900-01-01‘,小于今年。 a) 实现触发器birthday_check_trigger对表的更新约束。 b) 请找两个例子,验证触发器是否是实现了检查约束。 2.在进销存数据库创建触发器,对数据进行一致性约束。当销售表tbl_sell增加一条数据时,商品表的tbl_goods库存量减去对应的销量。当进货表tbl_receive增加一条数据时,商品表的库存量增加对应的进货数量。

时间: 2024-02-16 12:03:06 浏览: 21
对于第一部分,存储函数的创建与使用,我可以给出以下的 SQL 代码实现: 1. gcd1() 函数的创建: ``` CREATE FUNCTION gcd1(a INT, b INT) RETURNS INT BEGIN DECLARE r INT; WHILE b != 0 DO SET r = a % b; SET a = b; SET b = r; END WHILE; RETURN a; END; ``` 2. gcd2() 函数的创建: ``` CREATE FUNCTION gcd2(a INT, b INT) RETURNS INT BEGIN IF b = 0 THEN RETURN a; ELSE RETURN gcd2(b, a % b); END IF; END; ``` 3. 调用 gcd1() 和 gcd2() 函数: ``` SELECT gcd1(45, 18); SELECT gcd2(45, 18); ``` 4. do_convert() 函数的创建: ``` CREATE FUNCTION do_convert(score INT) RETURNS VARCHAR(10) BEGIN DECLARE grade VARCHAR(10); IF score >= 90 THEN SET grade = '优秀'; ELSEIF score >= 80 THEN SET grade = '良好'; ELSEIF score >= 70 THEN SET grade = '中等'; ELSEIF score >= 60 THEN SET grade = '及格'; ELSE SET grade = '不及格'; END IF; RETURN grade; END; ``` 5. 查询 do_convert() 函数是否创建成功: ``` SELECT ROUTINE_NAME, ROUTINE_DEFINITION FROM information_schema.ROUTINES WHERE ROUTINE_NAME = 'do_convert'; ``` 6. 使用 do_convert() 函数查询 A 课程学生的等级成绩: ``` SELECT student_id, student_name, class_id, do_convert(score) FROM score WHERE course_name = 'A'; ``` 对于第二部分,触发器的创建与使用,我可以给出以下的 SQL 代码实现: 1. 创建生日检查触发器: ``` CREATE TRIGGER birthday_check_trigger BEFORE INSERT ON tbl_student FOR EACH ROW BEGIN IF NEW.birthday < '1900-01-01' OR NEW.birthday > CURDATE() THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Birthday must be between 1900-01-01 and today.'; END IF; END; ``` 2. 验证触发器是否实现了检查约束,例如: ``` -- 例子1:插入生日为空的记录 INSERT INTO tbl_student (student_id, student_name, birthday, class_id) VALUES (1, 'Tom', NULL, 1); -- 例子2:插入生日不在范围内的记录 INSERT INTO tbl_student (student_id, student_name, birthday, class_id) VALUES (2, 'Jerry', '1899-12-31', 2); ``` 3. 创建销售和进货触发器: ``` -- 销售表 CREATE TRIGGER sell_trigger AFTER INSERT ON tbl_sell FOR EACH ROW BEGIN UPDATE tbl_goods SET stock = stock - NEW.quantity WHERE goods_id = NEW.goods_id; END; -- 进货表 CREATE TRIGGER receive_trigger AFTER INSERT ON tbl_receive FOR EACH ROW BEGIN UPDATE tbl_goods SET stock = stock + NEW.quantity WHERE goods_id = NEW.goods_id; END; ```

相关推荐

最新推荐

recommend-type

MySQL系列—-创建存储函数、游标的使用

MySQL系列—-创建存储函数、游标的使用创建存储函数输入任意三个数,结果输出它们的最小值调用函数使用游标使用游标从表中查询信息从sc表中查询成绩高于80分的学生信息有帮助的别忘了点个赞再走哦!! 本期是MySQL...
recommend-type

完美解决SQL server 5173问题(一个或多个文件与数据库的主文件不匹配)

一个或多个文件与数据库的主文件不匹配。如果是尝试附加数据库,请使用正确的文件重试该操作。如果这是现有数据库,则文件可能已损坏,应该从备份进行还原。 如果出现这个错误,不用急,这是mdf和ldf不一致导致,...
recommend-type

SQL Sever中使用SQL语句实现把重复行数据合并为一行并用逗号分隔

主要介绍了SQL Sever中使用SQL语句实现把重复行数据合并为一行并用逗号分隔,本文给出了两种实现方式,需要的朋友可以参考下
recommend-type

只有两个字段用一个sql语句查询出某个学生的姓名、成绩以及在表中的排名

主要介绍了只有两个字段用一个sql语句查询出某个学生的姓名、成绩以及在表中的排名,需要的朋友可以参考下
recommend-type

谈谈sqlserver自定义函数与存储过程的区别

一、自定义函数:  1. 可以返回表变量  2. 限制颇多,包括  不能使用output参数;  不能用临时表;  函数内部的操作不能影响到外部环境;  不能通过select返回结果集;  不能update,delete,数据库表;  3....
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

2. 通过python绘制y=e-xsin(2πx)图像

可以使用matplotlib库来绘制这个函数的图像。以下是一段示例代码: ```python import numpy as np import matplotlib.pyplot as plt def func(x): return np.exp(-x) * np.sin(2 * np.pi * x) x = np.linspace(0, 5, 500) y = func(x) plt.plot(x, y) plt.xlabel('x') plt.ylabel('y') plt.title('y = e^{-x} sin(2πx)') plt.show() ``` 运行这段
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。