首页 > 数据库 >肖SIR__数据库之存储过程 练习题__16.2

肖SIR__数据库之存储过程 练习题__16.2

时间:2024-03-08 15:56:15浏览次数:25  
标签:__ SIR int into 练习题 call procedure student select

实验
一、

实验要求:

理解存储过程的概念
掌握存储过程的语法格式、使用方法
掌握存
储过程的创建、执行
二、实验前提:
– drop table if exists student;
– Create table student
– (Id varchar(255), #学号
– Name varchar(255), #姓名
– Roomid varchar(255), #班级
– Sex char(1), #性别
– Degree varchar(3) );#成绩;
Insert into student value

s(‘1’,‘amy’,‘8’,‘0’,‘65’);
Insert into student values(‘2’,‘bob’,‘4’,‘1’,‘80’);
Insert into student values(‘3’,‘candy’,‘6’,‘0’,‘70’);
Insert into student values(‘4’,‘danny’,‘8’,‘1’,‘90’);
Insert into student values(‘5’,‘edward’,‘8’,‘1’,‘95’);
Insert into student values(‘6’,‘frank’,‘7’,‘1’,‘100’);

1:创建一个存储过程,实现查询表student中的记录信息,并执行存储过程

建一个存储

查询所有信息
delimiter
c r e a t e p r o c e d u r e i d s t u ( i n n u i n t ) B E G I N s e l e c t N a m e f r o m s t u d e n t w h e r e I d = n u ; E N D create procedure id_stu(in nu int) BEGIN select Name from student where Id=nu; END
createprocedureid
s

tu(innuint)BEGINselectNamefromstudentwhereId=nu;END

call id_stu(1);

2:创建一个存储过程,根据给定的学生学号返回该学生的姓名
in

out
方法一:直接输入学号查询出来的方法
delimiter
c r e a t e p r o c e d u r e i d s t u ( i n n u i n t ) B E G I N s e l e c t N a m e f r o m s t u d e n t w h e r e I d = n u ; E N D create procedure id_stu(in nu int) BEGIN select Name from student where Id=nu; END
createprocedureid
s

tu(innuint)BEGINselectNamefromstudentwhereId=nu;END

call id_stu(1);

方法二:输入编号,在返回姓名
desc student
select * from student
delimiter
c r e a t e p r o c e d u r e i d 1 ( i n o u t x v a r c h a r ( 20 ) ) B E G I N s e l e c t N a m e i n t o x f r o m s t u d e n t w h e r e I d = x ; E N D create procedure id1(inout x varchar(20)) BEGIN select Name into x from student where Id=x; END
createprocedureid1(inoutxvarchar(20))BEGINselectNameintoxfromstudentwhereId=x;END

set @x=1
call id1(@x);
select @x

3:创建一个存储过程,根据所给的班级的编号,统计该班人数,并将人数以输出变量返回给用户。
方法一:
delimiter //
create procedure cc(in b varchar(255) , out c int(10))
begin
select count(id) into c from student where Roomid=b;
END
//
call cc(8,@c)
select@c

方法二:
delimiter //
create procedure cc(in b varchar(255) , out c int(10))
begin
select count(id) into c from student where Roomid=b;
END
//
call cc(8,@c)
select@c

4:创建一个存储过程,根据所给的学号查询该学生的考试分数是否超过了85分, 若超过则输出“ 考得好”, 否则输出 “考得不好”。

id

85 “考的好”
考的不好
方法一:
delimiter //
drop procedure if EXISTS mm;
create procedure mm(in x int(10),out y int(255))
BEGIN
select degree into y from student where id=x;
select if (y>85, ‘考得好’,‘考的不好’ );
end
//
call mm(6,@y)

方法二:
delimiter //
drop procedure if EXISTS mm;
create procedure mm(in x int (10))
BEGIN
declare i char(255) DEFAULT (select degree from student where id=x);
select if (i>85,‘考得好’,‘考的不好’);
end
//
call mm(6)
方法三:
delimiter//
DROP PROCEDURE IF EXISTS dd;
CREATE PROCEDURE dd(in x varchar(255))
BEGIN
declare i INT ;
set i=(SELECT cast((SELECT degree FROM student where Id=x) as signed)) ;
IF i >85 then
SELECT ‘考得好’ ;
ELSE
SELECT ‘考得不好’;
END IF;
END
//
call dd(1);
方法四:
drop procedure if exists pro;
delimiter//
create procedure pro(in x int)
BEGIN
if (select degree from student where id=x)>85 then
select ‘考得好’;
else
select ‘考得不好’;
end if;
END
//
call pro(2);

实验5:创建一个存储过程,对表student增加两条记录。

1,已建表,在插入数据

方法一:
delimiter //
drop procedure if exists dd;
create procedure dd(in x varchar(255),in y varchar(255),in z varchar(255),in m char(1),in n varchar(3))
BEGIN
declare i int default 0;
Insert into student values(x,y,z,m,n);
END
//
call dd(7,‘adv’,4,1,59);
select * from student;
方法二:
delimiter //
DROP PROCEDURE if EXISTS ee;
CREATE PROCEDURE ee()
BEGIN
DECLARE i int DEFAULT (SELECT count(*) from student);
INSERT into student (Id) VALUES(i+1);
INSERT into student (Id) VALUES(i+2);
SELECT * from student;
end
//
call ee();

方法三:
drop procedure if exists pro;
delimiter//
create procedure pro(in x int)
BEGIN
declare i int default 0;
select max(id) into i from student;
while i<x do
insert into student(id) values(i+1);
set i=i+1;
end while;
END
//delimiter;
call pro(3);

方法四:
drop procedure if exists pro;
delimiter//
create procedure pro(in x int)
BEGIN
declare i int default 0;
declare j int default 0;
select max(id) into i from student;
set j=i;
while i<j+x do
insert into student(id) values(i+1);
set i=i+1;
end while;
END
//delimiter;
call pro(3);
select * from student;

方法五:
delimiter //
drop procedure if exists ee;
create procedure ee()
begin
insert into student values(“7”,“aaa”,“6”,“0”,“88”),(“8”,“bbb”,“4”,“1”,“89”);
END
//
call ee();

6:请撰写一个存储过程,输出各班学生的平均成绩。
select avg(degree) from student group by roomid;
方法:
delimiter//
DROP PROCEDURE IF EXISTS ff;
CREATE PROCEDURE ff()
BEGIN
SELECT Roomid,avg(Degree) FROM student GROUP BY Roomid;
END
//
call ff();

7:请撰写一个存储过程,能根据用户输入的学号,输出学生的姓名、性别到两个参数变量中,以供其它程序使用。
方法一:
delimiter//
DROP PROCEDURE IF EXISTS gg;
CREATE PROCEDURE gg(in x VARCHAR(10),OUT y varchar(10),out z char(10) )
BEGIN
SELECT Name,Sex INTO y,z FROM student WHERE Id=x;
END
//
call gg(1,@y,@z);
SELECT @y,@z;
方法二:
delimiter //
drop procedure if exists ff;
create procedure ff(in x int,out y char(20),out z char)
BEGIN
select Name into y from student where Id=x;
select Sex into z from student where Id=x;
END
//
call ff(3,@y,@z);
select @y,@z;

8:撰写一个存储过程,根据用户输入的学号,输出学生性别,成绩两个参数放到新表temp中Create table temp(Sex varchar(255),Degree varchar(255));
两张表的字段一致,插入数据:
方法一:insert into 目标表 select * from 来源表;#插入全部数据
方法二:insert into 目标表(字段 )select 字段1,字段2 from 来源表。

方法一:
delimiter //
drop procedure if exists gg;
create procedure gg(in x varchar(255))
begin
declare a varchar(255) default (select sex from student where id=x);
declare b varchar(255) default (select degree from student where id=x);
drop table if exists temp;
create table temp(Sex varchar(255),Degree varchar(255));
insert into temp values(a,b);
select *from temp;
end
//
call gg(“6”);

方法二:
delimiter //
drop procedure if exists gg;
drop table if exists temp;
create procedure gg(in x int)
BEGIN
declare m char(20) default 0;
declare n char default 0;
select Degree into m from student where Id=x;
select Sex into n from student where Id=x;
Create table temp(Sex varchar(255),Degree varchar(255));
insert into temp values(m,n);
END
//
call gg(2);
select * from temp;

9:请撰写一个存储过程,求1+2+3+…x的值。
请撰写一个存储过程,求2+4+…x的值。
请撰写一个存储过程,求1+3+5+…x的值。

(1)
方法一:
delimiter //
drop PROCEDURE if exists yy;
create procedure yy(in i int)
BEGIN
declare j int ;
set j=(i+1)*i/2;
select j;
end
//
方法二:
call mm(4);delimiter //
DROP PROCEDURE if EXISTS mm;
CREATE PROCEDURE mm(in x VARCHAR(255))
BEGIN
DECLARE a int DEFAULT 1;
DECLARE b int DEFAULT 0;
WHILE (a<x+1) DO
set b=b+a;
set a=a+2;
END WHILE;
SELECT b;
end
//
call mm(8);
call yy(6)
方法三:
delimiter //
drop PROCEDURE if exists yy;
create procedure yy(in i int,out y int)
BEGIN
declare j int default 0 ;
while (i>0) DO
set j=i+j;
set i=i-1;
end while;
set y=j;
end
//
call yy(3,@x)
select @x
方法四:
delimiter//
DROP PROCEDURE if EXISTS xx;
CREATE PROCEDURE xx(IN x int )
BEGIN
DECLARE i INT DEFAULT 0;
DECLARE x1 int ;
set x1=x;
WHILE (i<x) DO
set x1=i+x1;
set i=i+1;
END WHILE ;
set x=x1;
SELECT x;
END
//
call xx(9);

(2)偶数和
call mm(4);delimiter //
DROP PROCEDURE if EXISTS mm;
CREATE PROCEDURE mm(in x VARCHAR(255))
BEGIN
DECLARE a int DEFAULT 2;
DECLARE b int DEFAULT 0;
WHILE (a<x+1) DO
set b=b+a;
set a=a+2;
END WHILE;
SELECT b;
end
//
(3)奇数和
call mm(4);delimiter //
DROP PROCEDURE if EXISTS mm;
CREATE PROCEDURE mm(in x VARCHAR(255))
BEGIN
DECLARE a int DEFAULT 2;
DECLARE b int DEFAULT 0;
WHILE (a<x+1) DO
set b=b+a;
set a=a+1;
END WHILE;
SELECT b;
end
//
————————————————

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/m0_47403059/article/details/115603324

标签:__,SIR,int,into,练习题,call,procedure,student,select
From: https://www.cnblogs.com/xiaolehong/p/18061155

相关文章

  • 01引入方式
    1<!DOCTYPEhtml>2<htmllang="en">3<head>4<metacharset="UTF-8">5<metaname="viewport"content="width=device-width,initial-scale=1.0">6<title>Document......
  • 02选择器
    1<!DOCTYPEhtml>2<htmllang="en">3<head>4<metacharset="UTF-8">5<metaname="viewport"content="width=device-width,initial-scale=1.0">6<title>Document......
  • docker 常用命令
    docker常用命令1.dockersearch[OPTIONS]NAME#搜索DockerHub上的镜像。-q:只显示仓库名。--filter:设置过滤条件,比如搜索官方镜像可以使用--filter="is-official=true"。limit:设置搜索结果的最大条数。--no-trunc:显示完整的镜像描述,而不是截断的描述。例子......
  • python面试题 :进程、线程、协程的区别
    进程、线程和协程区别1.进程进程是系统资源分配的最小单位,系统由一个个进程(程序)组成一般情况下,包括文本区域(textregion)、数据区域(dataregion)和堆栈(stackregion)。文本区域存储处理器执行的代码数据区域存储变量和进程执行期间使用的动态分配的内存;堆栈区域存储着活动......
  • 排查 dotNET Core 程序内存暴涨的问题
    0.问题新版本上线之后,发现内存猛涨,入站流量猛增,不清楚具体原因,部分接口提示OOM异常,随后Pod直接崩溃无限重启。1.准备Pod已经接入了NewRelic和Graylog,但是仍然没有办法找到真正的罪魁祸手,此时只能进入Pod容器当中抓取内存Dump信息。我们容器的基础镜像是基于Apli......
  • 解决syslog服务器启动问题
    Syslog监控和管理对于每个组织来说都很重要,可以减少系统停机时间、提高网络性能并加强企业的安全策略。而在网络系统管理中,syslog服务用于收集、存储和管理系统和设备的日志信息。然而,有时候我们可能会遇到syslog服务器无法启动的问题,这会给网络管理和故障排查带来一定的困扰。......
  • 【Interview】一般外包公司招聘测试岗位的要求
    1.测试技能要求会一门编程语言(java/python),考察自动化脚本编写能力,说明招聘的岗位极可能有这方面的需要。不过编码能力,外包公司一般要求会基础,能看懂开发写的代码,自己也能写写最好。SQL能力,一般测试多用到查询,不过对于一个测试来说,掌握SQL常用的增删改查是必要的,并且对于具体的......
  • Flink CDC简介-flinkcdc-jian-jie
    FlinkCDC官方文档什么是FlinkCDC¶FlinkCDCConnectors是ApacheFlink的一组源连接器,使用变更数据捕获(CDC)从不同数据库中获取变更。FlinkCDCConnectors集成Debezium作为捕获数据变化的引擎。所以它可以充分发挥Debezium的能力。详细了解Debezium是什么。支......
  • Activity 流程模型导入导出-activity流程模型导入导出
    环境版本springboot:2.5.6activity:5.22.0导出@RequestMapping("/exportModelXml")publicvoidexportModelXml(HttpServletResponseresponse,@RequestParamStringmodelId)throwsIOException{Modelmodel=repositoryService.getMode......
  • ubuntu 22.04 安装samba服务
    1.安装软件sudoaptinstallsambasamba-common如果出现类似错误:dpkg:处理软件包samba-common-bin(--configure)时出错参考如下处理:sudosumv/var/lib/dpkg/info/var/lib/dpkg/info_bakmkdir/var/lib/dpkg/infoapt-getupdate&&apt-get-finstallmv/var/l......