存储过程练习题

合集下载

oracle-存储过程练习题

oracle-存储过程练习题

1.创建用户kaifa (密码亦为kaifa)并分配connect,create table,resource 权限。

tCREATE user KAIFA IDENTIFIED BY KAIFA DEFAULT TABLESPACE HOSDATATEMPOARY TABLESPACE TEMPDATA;GRANT CONNECT . CREATE TABLE • RESOURCE TO KAIFA2.在做报表统计时,需要根据报表日期和币种从概要表中查询本期余额。

其中币种代码如下:--RMB 人民币--CNY 本位币—USD 外币折美元如果币种为RMB,则取出人民币余额作为本期余额;为CNY,则取本位币余额;为USD 则取外币折美元余额。

请编写一个函数GetCurrBal (qrp.rq IN VARCHAR2. ―报表日期qrp_code IN VARCHAR2 —币种)CREATE OR REPLACE FUNCTION GetCurrBal(Vqrp_rq Date •—报表日期Vqrp.code VARCHAR2 一币种)RETURN NUMBERISVAMOUNT NUMBER :'DATE Date;BEGINSELECT ACCOUNTING.DATE INTO VDATE FROM CCB_GYBWhere ACCOUNTING_DATE = Vqrp_rq;IF Vqrp_code = 'RMB* THENSELECT RMB_YTD_BA1-ANCE INTO VAMOUNT FROM CCB_GYB WHERE Vqip_code二r RMB*AND ACCOUNTING_DATE- VDATE;ELSEIF Vqrp.code = 'CNT THENSELECT CNY_YTD_BALANCII INTO VAMOUNT FROM CCB_GYB WHERE Vqip_code二'CNY';ELSESELECT USD_YTD_BALANCE INTO VAMOUNT FROM CCB_GYB WHERE Vqrp_code-END IF :END IF ;COMMIT;RETURN VAMOUNT;END;■一对多行处理.用游标一-多单行处理,用SELECT实现此功能,并能在sqlplus里调用。

mysql存储过程练习题

mysql存储过程练习题

mysql存储过程练习题MySQL存储过程练习题MySQL是一种常用的关系型数据库管理系统,它提供了存储过程的功能,可以将一系列SQL语句封装为一个可重复使用的代码块。

存储过程可以提高数据库操作的效率,并且可以实现复杂的业务逻辑。

在本文中,我们将介绍一些MySQL存储过程的练习题,帮助读者巩固对存储过程的理解和应用。

1. 创建一个存储过程,查询指定学生的成绩信息。

```sqlDELIMITER //CREATE PROCEDURE get_student_score(IN student_id INT)BEGINSELECT * FROM scores WHERE student_id = student_id;END //DELIMITER ;```这个存储过程接收一个学生ID作为参数,然后查询该学生的成绩信息并返回结果。

2. 创建一个存储过程,计算指定学生的平均成绩。

```sqlDELIMITER //CREATE PROCEDURE get_student_average_score(IN student_id INT, OUT average_score DECIMAL(5,2))BEGINSELECT AVG(score) INTO average_score FROM scores WHERE student_id = student_id;END //DELIMITER ;```这个存储过程接收一个学生ID作为输入参数,并将平均成绩作为输出参数返回。

3. 创建一个存储过程,查询指定科目的成绩最高和最低的学生。

```sqlDELIMITER //CREATE PROCEDURE get_top_bottom_student(IN subject_id INT, OUTtop_student VARCHAR(50), OUT bottom_student VARCHAR(50))BEGINSELECT student_name INTO top_student FROM scores WHERE subject_id = subject_id ORDER BY score DESC LIMIT 1;SELECT student_name INTO bottom_student FROM scores WHERE subject_id= subject_id ORDER BY score ASC LIMIT 1;END //DELIMITER ;```这个存储过程接收一个科目ID作为输入参数,并将成绩最高和最低的学生姓名作为输出参数返回。

存储过程复习题

存储过程复习题

(一)存储过程1、对学生课程数据库,编写2个存储过程,分别完成下面功能:1)统计某一门课的成绩分布情况,即按照各分数段统计人数,要求使用游标。

create proc TotalByCnoNum(@cno varchar(6))asbegindeclare @num1 int,@num2 int, @num3 int,@num4 int,@num5 int,@gradeint,@cname char(20)select @num1=0,@num2=0,@num3=0,@num4=0,@num5=0declare cur_cno cursor for select grade from sc where cno=@cnoopen cur_cnofetch next from cur_cno into @gradewhile@@fetch_status=0beginif @grade between 90 and 100set @num1=@num1+1else if @grade between 80 and 89set @num2=@num2+1else if @grade between 70 and 79set @num3=@num3+1else if @grade between 60 and 69set @num4=@num4+1elseset @num5=@num5+1fetch next from cur_cno into @gradeendclose cur_cnodeallocate cur_cnoselect @cname=cname from course where cno=@cnoprint'课程:'+@cnameprint'分数段人数统计'print'=========================='print' 90-100 : '+convert(varchar(3),@num1)print' 80-89 : '+convert(varchar(3),@num2)print' 70-79 : '+convert(varchar(3),@num3)print' 60-69 : '+convert(varchar(3),@num4)print' 不及格: '+convert(varchar(3),@num5)print'=========================='end执行以下语句,显示课程号为3的成绩情况:exec TotalByCnoNum '3'运行结果如下:2)将学生选课成绩从百分制改为等级制(即A、B、C、D、E五级)。

第6章_存储过程与触发器练习题

第6章_存储过程与触发器练习题

有教师表(教师号,教师名,职称,基本工资),其中基本工资的取值与教师职称有关。

实现这个约束的可行方案是( )。

A 在教师表上定义一个视图B 在教师表上定义一个存储过程C 在教师表上定义插入和修改操作的触发器D 在教师表上定义一个标量函数参考答案C在SQL SERVER中,执行带参数的过程,正确的方法为()。

A 过程名参数B 过程名(参数)C 过程名=参数D ABC均可参考答案A在SQL SERVER服务器上,存储过程是一组预先定义并()的Transact-SQL语句。

A 保存B 解释C 编译D 编写参考答案C在SQL Server中,触发器不具有()类型。

A INSERT触发器B UPDATE触发器C DELETE触发器D SELECT触发器参考答案D()允许用户定义一组操作,这些操作通过对指定的表进行删除、插入和更新命令来执行或触发。

A 存储过程B 规则C 触发器D 索引参考答案C为了使用输出参数,需要在CREATE PROCEDURE语句中指定关键字( )。

A OPTIONB OUTPUTC CHECKD DEFAULT参考答案B下列( )语句用于创建触发器。

A CREATE PROCEDUREB CREATE TRIGGERC ALTER TRIGGERD DROP TRIGGER参考答案B下列( )语句用于删除触发器。

A CREATE PROCEDUREB CREATE TRIGGERC ALTER TRIGGERD DROP TRIGGER参考答案D下列( )语句用于删除存储过程。

A CREATE PROCEDUREB CREATE TABLEC DROP PROCEDURED 其他参考答案C下列( )语句用于创建存储过程。

A CREATE PROCEDUREB CREATE TABLEC DROP PROCEDURED 其他参考答案Asp_help属于哪一种存储过程()?A 系统存储过程B 用户定义存储过程C 扩展存储过程D 其他参考答案A以下语句创建的触发器是当对表A进行()操作时触发。

SQL存储过程习题

SQL存储过程习题

SQL存储过程习题SQL存储过程习题题目11、学校图书馆借书信息管理系统建立三个表:学生信息表:student图书表:book借书信息表:borrow请编写SQL语句完成以下的功能:1)查询“计算机”专业学生在“2007-12-15”至“2008-1-8”时间段内借书的学生编号、学生名称、图书编号、图书名称、借出日期;参考查询结果如下图所示:2)查询所有借过图书的学生编号、学生名称、专业;参考查询结果如下图所示:3)查询借过作者为“安意如”的图书的学生姓名、图书名称、借出日期、归还日期;参考查询结果如下图所示:4)查询目前借书但未归还图书的学生名称及未还图书数量;参考查询结果如下图所示:附加:建表语句:标准答案:题目2程序员工资表:ProWage创建一个存储过程,对程序员的工资进行分析,月薪1500到10000不等,如果有百分之五十的人薪水不到2000元,给所有人加薪,每次加100,再进行分析,直到有一半以上的人大于2000元为止,存储过程执行完后,最终加了多少钱?例如:如果有百分之五十的人薪水不到2000,给所有人加薪,每次加100元,直到有一半以上的人工资大于2000元,调用存储过程后的结果如图:请编写T-SQL来实现如下功能:1)创建存储过程,查询是否有一半程序员的工资在2200、3000、3500、4000、5000或6000元之上,如果不到分别每次给每个程序员加薪100元,至之一半程序员的工资达到2200,3000,3500,4000,5000或6000元。

2)创建存储过程,查询程序员平均工资在4500元,如果不到则每个程序员每次加200元,至到所有程序员平均工资达到4500元。

建表语句标准答案:题目3:学生成绩信息三个表,结构如下:学生表:Member课程表:成绩表:Score请编写T-SQL语句来实现如下功能:1) 查询各个学生语文、数学、英语、历史课程成绩,例如下表:2)查询四门课中成绩低于70分的学生及相对应课程名和成绩。

数据库存储过程练习附答案

数据库存储过程练习附答案

存储过程、触发器练习1、在学生选课数据库中,创建一存储过程deptmale,查询指定系的男生人数,其中系为输入参数,人数为输出参数。

create proc p_dept@dept char(20),@mannum int outputasselect @allcre=count(sno) from studentwhere sdept=@dept and ssex='男'declare @num intexec p_dept '计算机系',@num outputprint @num2、在s_c数据库中,创建一个存储过程totalcredit,根据输入的学生姓名,计算其总学分。

(使用输出参数)。

并执行该存储过程。

create proc p_cou@name char(10),@allcre int outputasselect @allcre=sum(ccredit)from student,course,scwhere student.sno=sc.sno and o=oand sname=@name group by sc.snodeclare @asum intexec p_cou '刘晨',@asum outputprint @asum3、创建一更新触发器upd_grade,设置sc表的grade字段不能被更新,并显示信息“学生成绩不能被修改,请与教务处联系”。

CREATE TRIGGER mes_scON scFOR UPDATEASIF UPDATE(grade)BEGINROLLBACK TRANPRINT '学生成绩不能被修改,请与教务处联系'END4、创建一个insert触发器uninsertstu,当在student表中插入一条新纪录时,如果是“计算机系”的学生,则撤销该插入操作,并返回“此系人数已满,不能再添加”信息。

MySQL视图存储过程练习题

MySQL视图存储过程练习题

一、编程题
创建数据库为: test_db
数据库中有以下表:
班级表(clazz)
学生表(student)
课程表(course)
选课表(selection)
操作题
1、创建一个视图,视图实现的是查询每个学生的年龄,性别。

2、创建一个视图,视图实现的是查询每个学生的姓名,所在的班级以及班
主任的姓名。

3、创建测试用户test,密码root。

并分配mysql数据库中的所有权限。

4、创建一个存储过程,用于查询课程表中所有信息。

并调用该存储过程。

5、创建一个存储过程,用于查询课程表中学分绩点在某个范围内的课程名
称,课程简介。

6、统计课程表中的课程数量,如果小于6插入两条课程信息,否则删除id
大于6课程信息。

7、创建存储过程,使用游标循环获取班级表中第3结果的班级名称,任
课老师的信息该存储过程。

8、创建存储过程,使用游标循环获取班级表中所有结果的班级名称。

并调用该存储过程。

(使用repeat循环方式)
9、创建存储过程,使用游标循环获取学生表中所有结果的学生姓名和年龄。

并调用该存储过程。

(使用while循环方式)。

存储过程在业务逻辑实现中的试卷

存储过程在业务逻辑实现中的试卷

存储过程在业务逻辑实现中的试卷(答案见尾页)一、选择题1. 存储过程在数据库系统中的作用是什么?A. 用于存储查询结果B. 用于封装业务逻辑代码C. 用于数据导入导出D. 用于事务管理2. 存储过程与函数的主要区别是什么?A. 存储过程可以接收参数并返回值B. 函数只能返回一个值C. 存储过程可以被多次调用D. 函数的执行速度通常更快3. 在SQL Server中,创建存储过程的命令是:A. CREATE PROCEDUREB. CREATE FUNCTIONC. ALTER PROCEDURED. ALTER FUNCTION4. 存储过程中可以使用哪些类型的控制结构?A. IF...ELSEB. CASEC. WHILED. FOR5. 在存储过程中,如何声明变量?A. 使用 DECLARE 关键字B. 使用 SET 关键字C. 直接使用变量名D. 使用 SELECT 语句6. 存储过程中的事务是如何管理的?A. 由数据库管理系统自动管理B. 由存储过程内部的 MIT 或 ROLLBACK 语句管理C. 由程序员在代码中显式管理D. 由操作系统管理7. 如何在存储过程中处理异常?A. 使用 TRY...CATCH 语句B. 使用 IF...ELSE 语句C. 使用 CASE 语句D. 使用 SELECT 语句8. 存储过程可以通过哪种方式传递参数给它所调用的外部程序?A. 通过参数数组B. 通过结果集C. 通过输入输出参数D. 通过临时表9. 在存储过程中,如何返回数据给调用者?A. 使用 SELECT 语句B. 使用 PRINT 语句C. 使用 RAISERROR 语句D. 使用 RETURN 语句10. 存储过程可以提高数据库系统的性能吗?A. 是的,因为它们减少了网络通信B. 不一定,取决于具体的业务场景C. 是的,因为它们减少了客户端和服务器之间的交互次数D. 不一定,取决于具体的查询和更新操作二、问答题1. 什么是存储过程?它在数据库中的作用是什么?2. 如何创建一个存储过程?3. 如何在存储过程中使用参数?4. 如何调用一个存储过程?5. 存储过程与函数的主要区别是什么?6. 如何修改一个存储过程?7. 存储过程中的事务是如何管理的?8. 如何查看和修改存储过程的权限?参考答案选择题:1. B2. C3. A4. A、B、C5. A6. B7. A8. C9. D 10. B问答题:1. 什么是存储过程?它在数据库中的作用是什么?存储过程是一种预编译的数据库对象,它包含一系列的SQL语句,这些语句可以通过名称被多次调用。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

存储过程练习题
存储过程是一种数据库对象,可以封装一系列的SQL语句并在数据库中进行存储和执行。

它在提高数据库性能和简化开发过程方面具有重要作用。

本文将从实际问题出发,提供一些存储过程练习题,帮助读者巩固并加深对存储过程的理解。

1. 创建一个存储过程,根据指定日期的订单数量进行统计,并将结果返回。

创建存储过程:
DELIMITER //
CREATE PROCEDURE OrderCount(IN orderDate DATE, OUT quantity INT)
BEGIN
SELECT COUNT(*) INTO quantity FROM Orders WHERE order_date = orderDate;
END //
DELIMITER ;
调用存储过程:
CALL OrderCount('2022-01-01', @quantity);
SELECT @quantity;
该存储过程通过接收一个订单日期作为输入参数,统计对应日期的订单数量,并将结果存储在输出参数中。

2. 创建一个存储过程,根据产品名称模糊查询对应的订单信息,并按照订单日期降序返回。

创建存储过程:
DELIMITER //
CREATE PROCEDURE SearchOrders(IN productName VARCHAR(100))
BEGIN
SELECT * FROM Orders JOIN Products ON Orders.product_id = Products.id
WHERE LIKE CONCAT('%', productName, '%')
ORDER BY order_date DESC;
END //
DELIMITER ;
调用存储过程:
CALL SearchOrders('手机');
该存储过程通过接收一个产品名称作为输入参数,根据该名称模糊查询对应订单的详细信息,并按照订单日期降序返回结果集。

3. 创建一个存储过程,根据客户ID查询该客户的订单总金额和订单数量,并将结果返回。

创建存储过程:
DELIMITER //
CREATE PROCEDURE CustomerOrderSummary(IN customerID INT, OUT totalAmount DECIMAL(10,2), OUT orderCount INT)
BEGIN
SELECT SUM(order_amount) INTO totalAmount, COUNT(*) INTO orderCount
FROM Orders WHERE customer_id = customerID;
END //
DELIMITER ;
调用存储过程:
CALL CustomerOrderSummary(1001, @totalAmount,
@orderCount);
SELECT @totalAmount, @orderCount;
该存储过程通过接收一个客户ID作为输入参数,统计该客户的订单总金额和订单数量,并将结果存储在输出参数中。

4. 创建一个存储过程,根据员工ID查询该员工的销售额和销售订单数量,并将结果返回。

创建存储过程:
DELIMITER //
CREATE PROCEDURE EmployeeSalesSummary(IN employeeID INT, OUT totalSales DECIMAL(10,2), OUT orderCount INT)
BEGIN
SELECT SUM(order_amount) INTO totalSales, COUNT(*) INTO orderCount
FROM Orders JOIN Employees ON Orders.employee_id = Employees.id
WHERE Employees.employee_id = employeeID;
END //
DELIMITER ;
调用存储过程:
CALL EmployeeSalesSummary(1001, @totalSales, @orderCount);
SELECT @totalSales, @orderCount;
该存储过程通过接收一个员工ID作为输入参数,查询该员工的销售额和销售订单数量,并将结果存储在输出参数中。

通过以上存储过程练习题,读者可以加深对存储过程的理解,并通过实际问题的解决来提升数据库操作的效率和准确性。

同时,不同场景下的存储过程也可以根据需求进行相应的修改和优化,以满足实际
业务的需求。

希望读者能够灵活运用存储过程,并在实际项目中发挥其优势。

相关文档
最新文档