存储过程复习题
- 格式:doc
- 大小:62.50 KB
- 文档页数:4
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里调用。
单选题
1、将具有特定功能的一段SQL语句(多于一条)在数据库服务器上进行预先定义并编译,以
供应用程序调用,该段SQL程序可被定义为(D)
A、事物
B、触发器
C、视图
D、存储过程
2、以下对存储过程的叙述中,不正确的是(C)
A、存储过程可以定义变量
B、存储过程是一组为了完成特定功能的SQL语句组成的程序
C、存储过程不能嵌套调用
D、存储过程可以一次编译,多次执行
3、关于存储过程说法错误的是(C)
A、方便用户完成某些功能
B、用户存储过程方便用户批量执行T-SQL命令
C、用户存储过程不能调用系统存储过程
D、应用程序可以调用用户存储过程
4、存储过程的修改不能采用(D)。
A、界面方式修改命令方式创建的存储过程
B、ALTER PROCEDURE
C、先删除再创建
D、C REATE PROCEDURE
5、关于存储过程的描述正确的一项是(C)。
A、存储过程存在于内存中,每次重新启动DBMS时,便,会自动消失
B、存储过程在每次调用时都会被编译-次
C、存储过程可以包含输入和输出参数,增加了调用时的灵活性
D.执行一次存储过程所花的时间,比执行相同的SQL批处理要长
判断题
6、存储过程未存在服务器注册(错)
7、相较于用户自定义存储过程,系统存储过程更加的自由(错)
8、用户定义的存储过程是指由数据库管理系统所提供的存储过程(错)
9、存储过程可以带参数,从而增加调用灵活性(对)
10、存储过程一旦创建,其脚本就被加密,不能再次编辑修改(错)。
存储过程练习题存储过程是一种数据库对象,可以封装一系列的SQL语句并在数据库中进行存储和执行。
它在提高数据库性能和简化开发过程方面具有重要作用。
本文将从实际问题出发,提供一些存储过程练习题,帮助读者巩固并加深对存储过程的理解。
1. 创建一个存储过程,根据指定日期的订单数量进行统计,并将结果返回。
创建存储过程:DELIMITER //CREATE PROCEDURE OrderCount(IN orderDate DATE, OUT quantity INT)BEGINSELECT 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))BEGINSELECT * FROM Orders JOIN Products ON Orders.product_id = Products.idWHERE LIKE CONCAT('%', productName, '%')ORDER BY order_date DESC;END //DELIMITER ;调用存储过程:CALL SearchOrders('手机');该存储过程通过接收一个产品名称作为输入参数,根据该名称模糊查询对应订单的详细信息,并按照订单日期降序返回结果集。
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.写出统计某门课选人数的存储过程,输入参数课程号,输出参数人数。
/*3.创建存储过程,要求根据学生姓名查看学生的籍贯.(要求:在存储过程里定义两个参数,第一个接收由调用程序指定的输入值(学生姓名),第二个参数用于将该值返回调用程序)*//*4.程序员工资表:ProWage字段名称数据类型说明ID int 自动编号,主键PName Char(10) 程序员姓名Wage int 工资创建一个存储过程,对程序员的工资进行分析,月薪1500到10000不等,如果有百分之五十的人薪水不到2000元,给所有人加薪,每次加100,再进行分析,直到有一半以上的人大于2000元为止,存储过程执行完后,最终加了多少钱?例如:如果有百分之五十的人薪水不到2000,给所有人加薪,每次加100元,直到有一半以上的人工资大于2000元,调用存储过程后的结果如图:请编写T-SQL来实现如下功能:查询是否有一半程序员的工资在2200、3000、3500、4000、5000或6000元之上,如果不到分别每次给每个程序员加薪100元,至之一半程序员的工资达到2200,3000,3500,4000,5000或6000元。
/*5.编写一个存储过程PR_GET_PASS_RA TE统计某门课程的及格率,其传入参数是课程号P_CNO,传出参数是该课程成绩的及格率P_PASSRATE,及格率的格式形如:86.56%。
6.创建触发器T_1,功能是当向数据表学生添加记录时,显示学生的信息。
create trigger T_1 on 学生after insertas select * from 学生insert into 学生values('3001','李四','男','计本10')7.创建触发器T_2,功能是当向数据表班级添加、修改和删除记录时,显示学生的信息。
存储过程、触发器练习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表中插入一条新纪录时,如果是“计算机系”的学生,则撤销该插入操作,并返回“此系人数已满,不能再添加”信息。
一、编程题
创建数据库为: 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. 存储过程是什么?A. 一种数据库对象,用于存储逻辑操作B. 一种数据库对象,用于存储查询语句C. 一种数据库对象,用于存储流程控制语句D. 一种数据库对象,用于存储数据2. 触发器的作用是什么?A. 在数据库中插入、更新或删除数据前自动执行的程序B. 在数据库中创建、修改或删除表C. 用于数据完整性约束D. 用于权限管理3. 存储过程和触发器都存放在以下哪个对象中?A. 数据库B. 表C. 索引D. 视图4. 存储过程可以通过哪种方式调用?A. SQL语句B. 外部程序调用C. 内部程序调用D. 以上都是5. 触发器的类型有哪几种?A. INSERT触发器B. UPDATE触发器C. DELETE触发器D. ALL触发器6. 触发器的工作原理是在哪个事件发生时执行?A. 数据库打开时B. 数据库关闭时C. 数据被插入、更新或删除时D. 用户登录时7. 如何创建一个存储过程?A. 使用CREATE PROCEDURE语句B. 使用CREATE TABLE语句C. 使用ALTER TABLE语句D. 使用CREATE INDEX语句8. 触发器中的IF语句用于做什么?A. 进行条件判断B. 控制触发器的执行流程C. 计算数据D. 存储数据9. 在触发器中,哪个关键字表示不执行任何操作?A. ALLB. EXCEPTIONC. THEND. ELSE10. 触发器的执行顺序是怎样的?A. 从内到外,从上到下B. 从内到外,从下到上C. 从外到内,从上到下D. 从外到内,从下到上11. 触发器的功能是什么?A. 处理数据库中的数据完整性问题B. 执行数据库中的批量操作C. 监控数据库中的数据变化,并在特定事件发生时自动执行操作D. 管理数据库中的用户权限12. 存储过程与触发器都是数据库对象,它们的主要区别是什么?A. 存储过程用于存储查询结果,而触发器用于执行操作B. 存储过程可以有输入参数,而触发器不能C. 存储过程是预编译的,可以提高数据库性能,而触发器是运行时执行的D. 触发器只能由用户触发,而存储过程可以由任何具有权限的用户调用13. 下列哪个不是存储过程的特点?A. 可以接收参数B. 可以有多个输出参数C. 只能在数据库内部执行D. 可以直接修改数据库中的数据14. 触发器通常与哪个对象相关联?A. 数据库表B. 数据库视图C. 数据库索引D. 数据库存储过程15. 在MySQL中,触发器的类型有哪些?A. INSERT触发器B. UPDATE触发器C. DELETE触发器D. SELECT触发器16. 触发器的工作原理是什么?A. 当对触发器关联的数据表进行指定类型的操作时,触发器自动执行预定义的操作B. 当数据库服务器启动时,触发器自动执行C. 当有新的连接连接到数据库时,触发器自动执行D. 当有用户登录到数据库时,触发器自动执行17. 如何在MySQL中创建一个存储过程?A. 使用CREATE PROCEDURE语句B. 使用CREATE FUNCTION语句C. 使用ALTER PROCEDURE语句D. 使用ALTER FUNCTION语句18. 触发器中可以使用哪些类型的条件判断?A. IF...ELSE语句B. CASE语句C. THEN...ELSE语句D. ALL...IN语句19. 触发器可以分为几种类型?(多选)A. INSERT触发器B. UPDATE触发器C. DELETE触发器D. SELECT触发器20. 存储过程和触发器都存放在哪种类型的数据库对象中?A. 表B. 序列C. 索引D. 视图21. 存储过程的类型有哪几种?A. 标准存储过程B. 用户定义存储过程C. 扩展存储过程D. 内置存储过程22. 下列哪个不是存储过程中的控制结构?A. IF...ELSEB. WHILEC. CASED. GOTO23. 触发器在什么情况下会被触发?A. 当表被添加或修改时B. 当数据库连接打开时C. 当用户登录时D. 当执行特定SQL语句时24. 如何使用存储过程?A. 使用CREATE PROCEDURE语句创建存储过程B. 使用ALTER PROCEDURE语句修改存储过程C. 使用DROP PROCEDURE语句删除存储过程D. 以上都是25. 触发器的主要优点是什么?A. 提高数据库性能B. 减少数据库维护成本C. 增加数据库安全性D. 以上都是26. 触发器的主要缺点是什么?A. 可能导致数据库性能下降B. 可能导致数据库死锁C. 可能导致数据库崩溃D. 可能导致数据库锁定二、问答题1. 什么是存储过程?请简述其特点。
Oracle存储过程练习题1.1.创建⼀个过程,能向dept表中添加⼀个新记录。
(in参数)创建过程create or replace procedure insert_dept( num_dept in number, var_ename in varchar2, var_loc in varchar2 ) isbegininsert into deptvalues(num_dept,var_ename,var_loc);commit;end insert_dept;/调⽤begininsert_dept(79,'技术部','武汉');end;/2.从scott.emp表中查询给定职⼯(提⽰:使⽤&来输⼊员⼯编号)的职⼯姓名和⼯资。
(要求:利⽤out模式的参数将值传给调⽤者。
)创建过程create or replace procedure select_emp(num_empno in emp.empno%type,name out emp.ename%type,salary out emp.sal%type) isbeginselect ename,sal into name,salary from emp where empno = num_empno;exceptionwhen no_data_found thendbms_output.put_line('该部门不存在');end select_emp;/调⽤declarevar_name emp.ename%type,var_salary emp.sal%type) isbeginselect_emp(&员⼯编号,var_ename,var_salary);if var_ename is not null thendbms_output.put_line(var_ename||' '||var_salary);end if;end;/3.创建⼀个过程,在执⾏调⽤过程时,可随机输⼊emp表中某个雇员的姓名,根据雇员的姓名,返回该雇员的薪⽔值,并输出。
储存过程(答案)
单选题
1、将具有特定功能的一段SQL语句(多于一条)在数据库服务器上进行预先定义并编译,以
供应用程序调用,该段SQL程序可被定义为(D)
A、事物
B、触发器
C、视图
D、存储过程
2、以下对存储过程的叙述中,不正确的是(C)
A、存储过程可以定义变量
B、存储过程是一组为了完成特定功能的SQL语句组成的程序
C、存储过程不能嵌套调用
D、存储过程可以一次编译,多次执行
3、关于存储过程说法错误的是(C)
A、方便用户完成某些功能
B、用户存储过程方便用户批量执行T-SQL命令
C、用户存储过程不能调用系统存储过程
D、应用程序可以调用用户存储过程
4、存储过程的修改不能采用(D)。
A、界面方式修改命令方式创建的存储过程
B、ALTER PROCEDURE
C、先删除再创建
D、C REATE PROCEDURE
5、关于存储过程的描述正确的一项是(C)。
A、存储过程存在于内存中,每次重新启动DBMS时,便,会自动消失
B、存储过程在每次调用时都会被编译-次
C、存储过程可以包含输入和输出参数,增加了调用时的灵活性
D.执行一次存储过程所花的时间,比执行相同的SQL批处理要长
判断题
6、存储过程未存在服务器注册(错)
7、相较于用户自定义存储过程,系统存储过程更加的自由(错)
8、用户定义的存储过程是指由数据库管理系统所提供的存储过程(错)
9、存储过程可以带参数,从而增加调用灵活性(对)
10、存储过程一旦创建,其脚本就被加密,不能再次编辑修改(错)。
大学生SQL server存储过程练习题大学生sqlserver存储过程练习题存储过程练习(一)不带参数的存储过程的创建和修改1.在学生数据库中创建名为myp1的存储过程。
存储过程的功能是显示学生中的所有记录。
2、运行myp1,检查是否实现功能。
3.修改myp1,使其功能是在学生中显示05541类的学生记录,然后测试其功能是否实现。
4、创建一个存储过程myp2,完成的功能是在表student、表t_course和表score中查询以下字段:班级、学号、姓名、性别、课程名称、考试分数。
(二)使用输入参数创建存储过程1、创建一个带有一个输入参数的存储过程stu_info,该存储过程根据传入的学生编号,在student中查询此学生的信息。
2.使用一个输入参数Info2创建一个存储过程stu,该存储过程根据传入的学号查询学生中学生的班级、学号、姓名和年龄。
3、创建一个带有一个输入参数的存储过程stu_info3,该存储过程根据传入的班级编号,查询该班所有同学的所有科目的成绩和。
4.创建一个带有两个输入参数的存储过程stu_uinfo4,该存储过程根据传入的课程号和课程号查询班上所有学生的课程平均分数。
5、创建一个带有两个输入参数的存储过程stu_info5,该存储过程根据传入的学号和课程号,在scores中查询此学号的学生此课程号的成绩。
(三)使用输入和输出参数创建存储过程1、创建一个带有参数的存储过程stu_age,该存储过程根据传入的学生编号,在student中算出此学生的年龄,并根据程序执行结如果返回不同的值,程序将成功执行,并返回整数0。
如果执行错误,则返回错误号。
2、创建一个带参数的存储过程,输入参数为课程名称,查询有哪些班级的哪些学生参加了这门课程的考试及学生的考试成绩,存储过程返回0表示程序执行成功,返回其他整数,表示程序在执行时出现错误。
存储过程语法练习题存储过程语法练习题存储过程是数据库中一种非常重要的对象,它可以用来封装一系列的SQL语句,实现特定的功能。
通过存储过程,我们可以提高数据库的性能,简化复杂的业务逻辑,并且可以实现一些数据库本身不支持的功能。
本文将通过一些练习题来帮助读者加深对存储过程语法的理解和应用。
练习一:创建一个简单的存储过程假设有一个学生表student,包含字段id、name和age。
请编写一个存储过程,用于查询年龄大于等于18岁的学生信息,并按照年龄降序排序。
解答:```sqlCREATE PROCEDURE GetAdultStudentsASBEGINSELECT id, name, ageFROM studentWHERE age >= 18ORDER BY age DESCEND```练习二:带参数的存储过程在练习一的基础上,假设需要根据学生的姓名查询学生信息。
请修改存储过程,使其可以接受一个姓名参数,并根据姓名查询学生信息。
解答:```sqlCREATE PROCEDURE GetStudentByName@name NVARCHAR(50)ASBEGINSELECT id, name, ageFROM studentWHERE name = @nameEND```练习三:带输出参数的存储过程假设有一个学生表student,包含字段id、name和age。
请编写一个存储过程,用于查询年龄大于等于18岁的学生数量,并将结果输出。
解答:```sqlCREATE PROCEDURE GetAdultStudentCount@count INT OUTPUTASBEGINSELECT @count = COUNT(*)FROM studentWHERE age >= 18END```练习四:带返回值的存储过程在练习三的基础上,假设需要查询年龄大于等于18岁的学生数量,并返回结果。
请修改存储过程,使其可以返回学生数量。
习题一、选择题1.如果当前日期为2003/9/17,下面可以返回17的函数是()。
A.DATEPART(8,9,GETDATE())B.DATEPART(day,GETDATE())C.DATEPART(date)D.DATEPART(date,GETDATE())2.下列()是对存储过程的描述A.定义了一个有相关列和行的集合B.当用户修改数据时,一种特殊形式的存储过程被自动执行C.SQL语句的预编译集合D.它根据一或多列的值,提供对数据库表的行的快速访问3.对于下面的存储过程:CREATE PROCEDURE Myp1 @P Int As select Studentname,Age from Strdents where Age==@p如果在students表中查找年龄18岁的学生,正确调用存储过程的是()A.exec Myp1 @p=’18’B.exec Myp1 @p=18C.exec Myp1 p=’18’D.exec Myp1 p=184.下面哪一个关键字不是Transac-SQL的函数?()A.DAY()B.YEAR()C.MONTH()D.SECOND()5.下面哪一个函数用于判断两个日期相隔的时间差?()A.DATEADD()B.DATEDIFF ()C.DATENAMED.GETDATE6.下列函数中,返回值数据类型为int 的是()。
A.LEFTB.LENC.LTRIMD.SUNSTRING7.SELECT CHARINDEX ('V',SUBSTRING('SQL SERVER 2008',5,6))得到的结果是()A.4B.6C.VD.S8.SELECT LEFT(REPLACE('abcdefghicde','cde','xxx'),4) 得到的结果是()A.abcdB.icdeC.abxxD.axxx9.需要知道当前日期的年份,不能实现的是()A.year(getdate())B.DATEPART(year,getdate())C.DATENAME(year,getdate())D.DATEDIFF(year,getdate())10.下面有关于存储过程的说法不正确的是A.存储过程是一种独立的数据库对象,它在服务器上创建和运行B.使用存储过程可以减少网络流量C.存储过程每次调用都要进行重新的编译和优化,降低了执行效率D.存储过程提供了一种安全机制11.在SQL SERVER服务器上,存储过程是一组预先定义并()的SQL语句。
存储过程练习题存储过程练习题存储过程是数据库中一种重要的对象,它可以将一系列的SQL语句封装起来,形成一个可重复使用的代码块。
通过使用存储过程,我们可以提高数据库的性能和安全性,同时也能减少代码的冗余。
为了更好地理解和运用存储过程,下面将给出一些练习题,帮助读者加深对存储过程的理解和应用。
1. 创建一个名为"GetEmployeeName"的存储过程,输入参数为员工的ID,输出参数为员工的姓名。
请写出相应的存储过程代码。
2. 创建一个名为"UpdateEmployeeSalary"的存储过程,输入参数为员工的ID和新的薪水,将指定员工的薪水更新为新的薪水。
请写出相应的存储过程代码。
3. 创建一个名为"GetDepartmentEmployees"的存储过程,输入参数为部门的ID,返回该部门中所有员工的信息。
请写出相应的存储过程代码。
4. 创建一个名为"DeleteInactiveEmployees"的存储过程,删除所有未激活的员工(即状态为"Inactive"的员工)。
请写出相应的存储过程代码。
5. 创建一个名为"GetEmployeeCountByDepartment"的存储过程,输入参数为部门的ID,返回该部门中员工的数量。
请写出相应的存储过程代码。
6. 创建一个名为"GetEmployeeBonus"的存储过程,输入参数为员工的ID,输出参数为员工的奖金。
奖金的计算规则为:如果员工的薪水大于5000,则奖金为薪水的10%;否则奖金为薪水的5%。
请写出相应的存储过程代码。
7. 创建一个名为"GetTopPaidEmployees"的存储过程,输入参数为返回的员工数量N,返回薪水排名前N的员工信息。
请写出相应的存储过程代码。
8. 创建一个名为"GetEmployeeAverageSalary"的存储过程,返回所有员工的平均薪水。
《存储过程》练习1、在“教务管理系统”数据库中创建一个名为ProcStudentInfo的存储过程,它返回学生的学号、姓名、性别、班级编号、年级和籍贯信息。
USE 教务管理系统CREATE PROCEDURE Proc_StudentInfoASSELECT 学号,姓名,性别,班级编号,年级,籍贯 FROM 学生信息2、用EXECUTE执行Proc_StudentInfo存储过程。
USE 教务管理系统EXECUTE Proc_StudentInfo3、创建一个存储过程,用于返回“教务管理系统”数据库上某个班级中所有学生的信息。
USE 教务管理系统CREATE PROCEDURE Proc_GetClassStudent1@ClassID varchar(14)ASSELECT 学号,姓名,性别,班级编号,年级,籍贯 FROM 学生信息WHERE 班级编号=@ClassID4、创建一个存储过程,用于返回“教务管理系统”数据库上某个班级中所有学生的信息,默认班级编号为'20031340000102' 。
USE 教务管理系统CREATE PROCEDURE Proc_GetClassStudent2@ClassID varchar(14)= '20031340000102'ASSELECT 学号,姓名,性别,班级编号,年级,籍贯 FROM 学生信息WHERE 班级编号=@ClassID5、使用不同参数传递值方式执行存储过程。
EXEC Proc_GetClassStudent2EXEC Proc_GetClassStudent2 '20031340000101'EXEC Proc_GetClassStudent2 @ClassID='20031340000104'6、创建一个存储过程,用于返回“教务管理系统”数据库上某个班级中的学生人数,默认班级编号为‘20031340000102’。
【题目】opengauss数据库中存储过程的例题1. 什么是存储过程?2. 存储过程的优点及作用3. 存储过程的创建语法及例题分析4. 存储过程的调用语法及例题分析5. 存储过程的删除语法及例题分析6. 存储过程的注意事项及优化建议【正文】近年来,随着数据库技术的不断发展,存储过程作为一种数据库对象得到了广泛的应用。
在opengauss数据库中,存储过程可以提高数据库的执行效率,降低网络传输开销,同时也提供了一种复杂的编程能力。
本文将对opengauss数据库中存储过程的基本概念、创建、调用、删除语法以及注意事项进行介绍和分析,希望能够对读者有所帮助。
1. 什么是存储过程?存储过程是一组经过预编译的SQL语句和过程控制语句,存储在数据库中并能够被用户程序调用和执行的脚本。
存储过程能够在数据库中执行逻辑操作,通常用于完成特定的任务或者提供特定的功能。
在opengauss数据库中,存储过程通常以PL/pgSQL语言进行编写,其语法类似于PL/SQL。
存储过程可以包含变量定义、条件判断、循环等逻辑结构,使得数据库操作更加灵活和高效。
2. 存储过程的优点及作用存储过程在数据库中具有以下优点和作用:- 提高性能:存储过程在数据库中预编译,执行速度更快,能够减少网络传输开销。
- 降低网络流量:存储过程可以减少客户端和服务器端之间的通信次数,降低网络传输开销。
- 精简程序逻辑:将复杂的业务逻辑封装在存储过程中,减少了代码冗余,提高了代码的可维护性。
- 安全性高:存储过程可以在数据库中进行权限控制,避免了SQL注入等安全问题。
3. 存储过程的创建语法及例题分析在opengauss数据库中,创建存储过程的语法如下所示:```sqlCREATE OR REPLACE PROCEDURE procedure_name(parameters) LANGUAGE plpgsqlAS$$-- 存储过程的逻辑代码BEGIN-- 逻辑语句END$$;```下面以一个简单的存储过程例题进行分析:假设有一个名为`get_employee`的存储过程,其作用是获取employee表中指定ID的员工信息。
有教师表(教师号,教师名,职称,基本工资),其中基本工资的取值与教师职称有关。
实现这个约束的可行方案是( )。
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进行()操作时触发。
(一)存储过程
1、对学生课程数据库,编写2个存储过程,分别完成下面功能:
1)统计某一门课的成绩分布情况,即按照各分数段统计人数,要求使用游标。
create proc TotalByCnoNum
(
@cno varchar(6)
)
as
begin
declare @num1 int,@num2 int, @num3 int,@num4 int,@num5 int,@grade
int,@cname char(20)
select @num1=0,@num2=0,@num3=0,@num4=0,@num5=0
declare cur_cno cursor for select grade from sc where cno=@cno
open cur_cno
fetch next from cur_cno into @grade
while@@fetch_status=0
begin
if @grade between 90 and 100
set @num1=@num1+1
else if @grade between 80 and 89
set @num2=@num2+1
else if @grade between 70 and 79
set @num3=@num3+1
else if @grade between 60 and 69
set @num4=@num4+1
else
set @num5=@num5+1
fetch next from cur_cno into @grade
end
close cur_cno
deallocate cur_cno
select @cname=cname from course where cno=@cno
print'课程:'+@cname
print'分数段人数统计'
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五级)。
create proc ChangeGrade
as
begin
declare @dj char(1),@cname char(20),@cno char(6),@sno char(9), @grade int
declare cur_cno cursor for select grade,cno,sno from sc
open cur_cno
fetch next from cur_cno into @grade,@cno,@sno
print'学号课程号等级'
print'=========================='
while@@fetch_status=0
begin
if @grade between 90 and 100
set @dj='A'
else if @grade between 80 and 89
set @dj='B'
else if @grade between 70 and 79
set @dj='C'
else if @grade between 60 and 69
set @dj='D'
else
set @dj='E'
print @sno+' '+@cno+' '+@dj
print'--------------------------'
fetch next from cur_cno into @grade,@cno,@sno
end
print'========================='
close cur_cno
deallocate cur_cno
end
执行:
exec ChangeGrade
运行结果为:
2、对SPJ数据库,
1)创建一个存储过程ins_s_count,功能为根据提供的供应商号,供应商名,供应商所在地等信息,往S表中插入数据,并返回插入该记录之后,S表中的记录数。
create proc ins_s_count
(
@sno char(6),
@sname char(20),
@status char(10),
@city char(20)
)
as
begin
declare @num int
i nsert into s (sno,sname,status,city)values(@sno,@sname,@status,@city)
print'你添加的记录是:'
print'=================================================='
print'供应商号供应商名状态供应商所在地'
print' '+@sno+@sname+@status+@city
select @num=count(*)from s
print''
print'=================================================='
print'共有'+convert(varchar,@num)+'条记录'
end
在s表中添加如下数据:
exec ins_s_count 'S7','一建','120','杭州'
结果为:
2)调用该存储过程实现往S表中插入一条记录(‘S6’,’天盛’,‘40’‘福州’),并显示
插入该记录之后,S表中的记录数。
数据库脚本如第(1)题:
exec ins_s_count 'S6','天盛','40','福州'
创建一个存储过程,输入课程名称和课程编号,统计该门课程的选修次数create proc 选课次数
@名称varchar(30),@课程编号char(8),@选修次数int=0 output
as
if @名称is null
begin
print '请在调用存储过程时输入课程名称!'
return 1
end
if @课程编号is null
begin
print '请在调用存储过程时输入课程编号!'
return 1
end
if not exists(select * from 课程信息where 名称=@名称and 课程编号=@课程编号) begin
print '请输入正确的课程名称和代号!'
return 2
end
select @选修次数=count(a.学号) from 选课信息as a inner join 课程信息as b on a.课程编号=b.课程编号where b.名称=@名称and b.课程编号=@课程编号
if @@error<>0
begin
print '程序没有正常运行!'
return 3
end
return 0。