PLSQL 综合测试题(含详细答案)_第1页
PLSQL 综合测试题(含详细答案)_第2页
PLSQL 综合测试题(含详细答案)_第3页
PLSQL 综合测试题(含详细答案)_第4页
PLSQL 综合测试题(含详细答案)_第5页
已阅读5页,还剩2页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

PLSQL综合测试题(含详细答案)适用场景:数据库开发、运维、实习生技能考核考试时长:90分钟满分:100分说明:试题贴合实际工作场景,侧重PL/SQL基础语法、流程控制、游标、存储过程、异常处理核心知识点,无偏题怪题,答案附带详细解析。一、单项选择题(共10题,每题3分,共30分)1.以下不属于PL/SQL程序基本组成单元的是()A.声明部分(DECLARE)

B.执行部分(BEGIN...END)

C.循环部分(LOOP)

D.异常处理部分(EXCEPTION)2.PL/SQL中定义变量的正确语法是()A.varv_namevarchar2(20);

B.v_namevarchar2(20);

C.definev_namevarchar2(20);

D.setv_namevarchar2(20);3.以下哪种循环结构适合已知循环次数的场景()A.WHILE循环

B.FOR循环

C.LOOP...EXIT循环

D.嵌套循环4.PL/SQL中用来终止当前循环、跳出循环体的关键字是()A.BREAK

B.EXIT

C.STOP

D.RETURN5.关于隐式游标,以下说法正确的是()A.需要手动声明、打开、关闭

B.执行DML语句时自动触发创建

C.只能用于SELECT语句

D.无法获取SQL执行影响的行数6.以下不属于PL/SQL预定义异常的是()A.NO_DATA_FOUND

B.TOO_MANY_ROWS

C.NULL_VALUE_ERROR

D.DUP_VAL_ON_INDEX7.存储过程与函数的核心区别是()A.存储过程可以传参,函数不能

B.函数必须有返回值,存储过程无强制返回值

C.存储过程支持异常处理,函数不支持

D.函数可以执行DML语句,存储过程不可以8.PL/SQL中触发自定义异常的关键字是()9.游标属性%ROWCOUNT的作用是()A.判断游标是否打开

B.获取SQL语句影响的数据行数

C.判断游标是否提取到数据

D.获取游标当前指针位置10.以下哪种语句不能在PL/SQL块执行部分直接使用()A.SELECT...INTO

B.UPDATE

C.CREATETABLE

D.DELETE二、填空题(共5题,每题4分,共20分)1.PL/SQL程序块分为________、________、________三部分,其中________是必选部分。2.用于单行数据查询并赋值给变量的语法是________。3.游标属性中,判断是否成功提取到数据的属性是________。4.自定义异常的两步操作:先________异常,再________异常。5.能够在PL/SQL中执行动态SQL的语句是________。三、简答题(共3题,每题6分,共18分)1.简述PL/SQL中隐式游标和显式游标的区别及适用场景。2.简述NO_DATA_FOUND和TOO_MANY_ROWS异常的触发场景。3.简述存储过程的优点(至少3点)。四、编程题(共3题,共32分)已知基础数据表:员工表emp字段:empno(员工编号)、ename(员工姓名)、sal(薪资)、deptno(部门编号)1.编写PL/SQL程序块,输入员工编号,查询该员工姓名和薪资并打印输出,未查询到数据则提示“无此员工信息”。(10分)2.编写PL/SQL程序,使用游标遍历部门编号为10的所有员工,将薪资高于5000的员工薪资上调10%,并输出调整人数。(11分)3.创建存储过程,实现根据输入的部门编号,统计该部门员工总人数和平均薪资,并输出结果,做好异常处理。(11分)详细参考答案及解析一、单项选择题答案及解析1.答案:C解析:PL/SQL标准程序块由声明部分、执行部分、异常处理部分组成,执行部分为必选。循环是程序逻辑语句,不属于程序块的组成单元。2.答案:B解析:PL/SQL变量直接在DECLARE块中声明,语法为:变量名数据类型(长度);var、define、set均为SQLPLUS命令,非PL/SQL变量定义语法。3.答案:B解析:FOR循环可直接指定循环起始和结束值,适配已知循环次数场景;WHILE为条件循环,LOOP...EXIT为无条件循环,均适配未知循环次数场景。4.答案:B解析:PL/SQL中使用EXIT终止循环;BREAK为SQLPLUS命令,STOP、RETURN无法用于终止循环。5.答案:B解析:隐式游标由系统自动创建、管理、关闭,无需手动操作,执行INSERT、UPDATE、DELETE、单行SELECT语句时自动触发,可通过游标属性获取执行结果。6.答案:C解析:常用预定义异常包含NO_DATA_FOUND(无数据)、TOO_MANY_ROWS(多行数据)、DUP_VAL_ON_INDEX(索引重复值),无NULL_VALUE_ERROR预定义异常。7.答案:B解析:函数必须通过RETURN返回一个值,适用于计算返回单个结果;存储过程无强制返回值,适用于执行批量业务逻辑,二者均支持传参、异常处理、DML操作。8.答案:A9.答案:B解析:%ROWCOUNT:返回SQL影响的行数;%ISOPEN:判断游标是否打开;%FOUND:判断是否提取到数据。10.答案:C解析:PL/SQL执行部分默认仅支持DML语句(SELECT、UPDATE、DELETE、INSERT),DDL语句(CREATE、ALTER、DROP)需通过动态SQL执行。二、填空题答案1.声明部分(DECLARE)、执行部分(BEGIN)、异常处理部分(EXCEPTION);执行部分2.SELECT字段INTO变量FROM表名WHERE条件3.%FOUND5.EXECUTEIMMEDIATE三、简答题答案1.隐式游标和显式游标的区别及适用场景(1)创建方式:隐式游标由系统自动创建、关闭,无需手动操作;显式游标需要手动声明、打开、提取、关闭。(2)适用场景:隐式游标适用于单行SELECT语句、所有DML语句;显式游标适用于多行数据查询遍历场景。(3)使用特点:隐式游标操作简单,无需管理生命周期;显式游标灵活性高,可精准控制数据读取、分页、循环逻辑。2.NO_DATA_FOUND和TOO_MANY_ROWS异常触发场景两个异常均触发于SELECT...INTO单行查询语句:(1)NO_DATA_FOUND:查询条件匹配不到任何数据,无结果返回时触发。(2)TOO_MANY_ROWS:查询条件匹配到多条数据,超出单行查询的限制时触发。3.存储过程的优点(1)执行效率高:编译后存储在数据库端,无需重复编译,减少语法解析耗时;(2)降低网络开销:批量业务逻辑在数据库端执行,无需反复传输SQL语句;(3)安全性高:可通过权限控制限制用户直接操作数据表,仅开放存储过程调用权限;(4)复用性强:编写完成后可反复调用,统一业务逻辑,减少重复代码编写。四、编程题答案(可直接运行)1.根据员工编号查询员工信息sql

DECLARE

--定义变量存储员工信息

v_enameemp.ename%TYPE;

v_salemp.sal%TYPE;

v_empnoemp.empno%TYPE:=&输入员工编号;--接收手动输入参数

BEGIN

--单行查询赋值

SELECTename,salINTOv_ename,v_sal

FROMemp

WHEREempno=v_empno;

--输出查询结果

DBMS_OUTPUT.PUT_LINE('员工姓名:'||v_ename);

DBMS_OUTPUT.PUT_LINE('员工薪资:'||v_sal);

EXCEPTION

WHENNO_DATA_FOUNDTHEN

DBMS_OUTPUT.PUT_LINE('无此员工信息');

WHENOTHERSTHEN

DBMS_OUTPUT.PUT_LINE('查询出错,请检查数据');

END;

/2.游标遍历更新10部门员工薪资sql

DECLARE

--声明显式游标,查询10部门所有员工

CURSORcur_empIS

SELECTempno,salFROMempWHEREdeptno=10;

v_update_numNUMBER:=0;--统计更新人数

BEGIN

--遍历游标数据

FORrec_empINcur_empLOOP

--判断薪资是否高于5000

IFrec_emp.sal>5000THEN

UPDATEempSETsal=sal*1.1WHEREempno=rec_emp.empno;

v_update_num:=v_update_num+1;

ENDIF;

ENDLOOP;

--输出结果

DBMS_OUTPUT.PUT_LINE('本次薪资调整人数:'||v_update_num);

COMMIT;--提交事务

EXCEPTION

WHENOTHERSTHEN

ROLLBACK;--异常回滚

DBMS_OUTPUT.PUT_LINE('数据更新失败,事务已回滚');

END;

/3.统计部门人数和平均薪资的存储过程sql

CREATEORREPLACEPROCEDUREproc_count_dept(

p_deptnoINemp.deptno%TYPE--输入参数:部门编号

)

IS

v_total_numNUMBER;--员工总人数

v_avg_salNUMBER(10,2);--平均薪资,保留2位小数

BEGIN

--统计部门人数和平均薪资

SELECTCOUNT(*),AVG(sal)INTOv_total_num,v_avg_sal

FROMemp

WHEREdeptno=p_deptno;

--输出统计结果

DBMS_OUTPUT.PUT_LINE('部门编号:'||p_deptno);

DBMS_OUTPUT.PUT_LINE('部门员工总人数:'||v_total_num);

DBMS_OUTPUT.PUT_LINE('部门平均薪资:'||v_avg_sa

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论