还剩16页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
plsql表试题及答案前言为帮助学习PL/SQL的读者巩固表相关核心知识点,本文整理了4类典型试题,涵盖基础语法、表操作、约束管理、游标应用等内容,题型包括单选、多选、判断及简答题,答案附后,可作为日常练习和知识检验工具
一、单项选择题(共30题,每题1分)(请将正确答案的字母填入括号内)PL/SQL中,声明局部变量时使用的关键字是()A.VARB.VARIABLEC.DECLARED.LET以下关于PL/SQL中表类型的描述,正确的是()A.嵌套表(Nested Table)必须先创建类型才能使用B.数组表(Varray)的长度固定不可变C.数据库表(Table)只能存储在数据库中,无法在PL/SQL中声明为变量D.临时表(Temporary Table)每次会话数据独立,无需手动删除执行以下PL/SQL块时,会发生的结果是()DECLARETYPE emp_type ISTABLE OFemployees%ROWTYPE;emp_list emp_type;BEGIN第1页共18页SELECT*BULK COLLECTINTO emp_list FROM employees WHEREdepartment_id=30;DBMS_OUTPUT.PUT_LINE共查询到||emp_list.COUNT||条记录;END;A.输出0(无数据时)B.输出查询到的记录数C.编译报错(BULK COLLECT不支持%ROWTYPE)D.运行时错误(类型未定义)以下语句中,属于DDL操作表结构的是()A.INSERT INTOstudents VALUES1,张三B.UPDATE studentsSET age=20WHERE id=1C.ALTER TABLEstudents ADDemail VARCHAR250D.DELETE FROMstudents WHEREid=1创建表时,以下哪个约束可以确保列值唯一且非空()A.PRIMARY KEYB.UNIQUEC.NOT NULLD.FOREIGN KEYPL/SQL中,用于遍历查询结果集的游标类型是()A.显式游标(Explicit Cursor)B.隐式游标(Implicit Cursor)C.引用游标(Ref Cursor)D.以上都是以下关于游标属性的描述,错误的是()第2页共18页A.SQL%ROWCOUNT返回受影响的行数B.SQL%FOUND返回是否成功找到记录C.SQL%NOTFOUND与SQL%FOUND逻辑相反D.显式游标无%ROWCOUNT属性执行SELECT COUNT*FROMemp后,隐式游标的SQL%ROWCOUNT值为()A.0B.1C.表中记录总数D.1(无论表中数据多少)以下PL/SQL块中,能正确查询并打印员工姓名的是()A.DECLAREv_ename employees.ename%TYPE;BEGINSELECT enameINTO v_ename FROM employees WHEREempno=7369;DBMS_OUTPUT.PUT_LINE员工姓名||v_ename;END;B.DECLARETYPE t_ename ISTABLE OFemployees.ename%TYPE;v_ename t_ename;BEGINSELECT enameBULK COLLECTINTO v_ename FROM employees WHEREdeptno=10;第3页共18页DBMS_OUTPUT.PUT_LINE员工姓名||v_ename1;END;C.DECLARECURSOR c_emp ISSELECT ename FROMemployees;v_ename c_emp%ROWTYPE;BEGINOPEN c_emp;FETCH c_emp INTO v_ename;DBMS_OUTPUT.PUT_LINE员工姓名||v_ename;CLOSE c_emp;END;D.BEGINDBMS_OUTPUT.PUT_LINE员工姓名||SELECT enameFROMemployees WHEREempno=7369;END;以下哪个不是PL/SQL中用于操作表数据的DML语句()A.INSERTB.UPDATEC.ALTERD.DELETE创建表时,CONSTRAINT pk_stu PRIMARY KEYid表示()A.唯一约束B.主键约束(确保id唯一且非空)第4页共18页C.外键约束D.非空约束PL/SQL中,%TYPE和%ROWTYPE的主要作用是()A.简化变量声明,保持与表结构同步B.提高SQL执行效率C.实现表的复制D.定义临时表关于PL/SQL中FOR循环遍历游标,以下说法正确的是()A.必须先声明游标,再OPEN,FETCHB.无需声明、OPEN和FETCH,直接通过循环遍历结果集C.循环中无法修改游标的查询条件D.只能遍历一条记录以下PL/SQL块的运行结果是()DECLAREv_count NUMBER;BEGINSELECT COUNT*INTO v_count FROMemployees;IF v_count100THENDBMS_OUTPUT.PUT_LINE员工数量超过100人;ELSIF v_count50THENDBMS_OUTPUT.PUT_LINE员工数量50-100人;ELSEDBMS_OUTPUT.PUT_LINE员工数量少于50人;END IF;END;第5页共18页A.输出“员工数量超过100人”(假设employees表有150条记录)B.输出“员工数量50-100人”(假设employees表有70条记录)C.输出“员工数量少于50人”(假设employees表有30条记录)D.编译报错(缺少THEN)以下关于索引的描述,正确的是()A.索引会降低查询效率,建议不创建B.主键约束会自动创建唯一索引C.索引只能基于单列创建,不能基于多列D.索引对UPDATE操作无影响PL/SQL中,用于定义存储过程的关键字是()A.FUNCTIONB.PROCEDUREC.TRIGGERD.PACKAGE执行以下PL/SQL块后,v_deptno的值是()DECLAREv_deptno departments.deptno%TYPE;BEGINSELECT deptnoINTOv_deptno FROMdepartments WHEREdname=ACCOUNTING;EXCEPTIONWHEN NO_DATA_FOUND THENv_deptno:=-1;WHEN TOO_MANY_ROWS THENv_deptno:=-2;第6页共18页END;A.ACCOUNTING部门的deptno值B.-1(假设无此部门)C.-2(假设多个ACCOUNTING部门)D.编译报错以下哪个操作会导致表中数据被锁定()A.SELECT...FOR UPDATEB.INSERTC.DELETED.DROP TABLEPL/SQL中,BULK COLLECT的作用是()A.批量插入数据B.批量查询结果集到集合中C.批量删除数据D.批量更新数据关于PL/SQL中的游标变量(Ref Cursor),以下说法正确的是()A.必须先声明类型,再打开游标B.只能返回单列数据C.可以动态执行不同SQL语句D.无法与FOR循环结合使用创建表时指定CHECKage0AND age150的作用是()A.确保age非空B.确保age值在合理范围内C.确保age唯一D.无作用(CHECK约束在Oracle中不生效)第7页共18页执行TRUNCATE TABLEstudents与DELETE FROMstudents的区别是()A.TRUNCATE不记录日志,速度更快,DELETE记录日志B.DELETE会触发DELETE触发器,TRUNCATE不会C.TRUNCATE可以回滚,DELETE不可回滚D.A和B都正确PL/SQL中,以下哪个语句用于直接终止当前PL/SQL块的执行()A.RETURNB.EXITC.GOTOD.RAISE以下关于PL/SQL块中异常处理的描述,正确的()A.异常处理部分(EXCEPTION)必须紧跟在BEGIN之后B.可以不使用EXCEPTION部分,直接处理异常C.WHEN OTHERSTHEN可以捕获所有未处理的异常D.异常发生时,程序会立即终止,无法继续执行后续代码创建表时,CREATE TABLEstudentsid INT,name VARCHAR220,CONSTRAINT uk_name UNIQUEname中,uk_name是()A.主键约束B.外键约束C.唯一约束D.非空约束PL/SQL中,%ROWTYPE返回的是()A.表的一行数据B.表的一列数据第8页共18页C.表的名称D.表的数据类型以下语句中,能正确声明一个包含表数据的集合类型的是()A.TYPE emp_coll ISTABLE OFemployees.ename%TYPE;B.TYPE emp_coll ISTABLE OFemployees;C.TYPE emp_coll ISVARRAY employees%ROWTYPE;D.TYPE emp_coll ISTABLE employees%TYPE;执行SELECT empno,enameFROMemployees时,若查询结果有100条记录,使用BULK COLLECT的游标会()A.编译报错(BULK COLLECT不支持多列)B.返回一个包含100条记录的集合C.返回第一条记录D.仅返回一个集合,需手动遍历以下关于PL/SQL中FOR循环与游标结合的描述,正确的是()A.必须使用显式游标,不能用于隐式游标B.循环中无法修改游标变量C.会自动打开、遍历、关闭游标D.只能遍历单条记录PL/SQL中,用于创建自定义类型的关键字是()A.TYPEB.CREATE TYPEC.DEFINE TYPED.DECLARE TYPE
二、多项选择题(共20题,每题2分)(每题有多个正确答案,多选、少选、错选均不得分)第9页共18页以下属于PL/SQL中表相关数据类型的有()A.嵌套表(Nested Table)B.数组表(Varray)C.记录类型(Record)D.游标(Cursor)执行CREATE TABLE语句时,可指定的约束类型有()A.PRIMARY KEYB.FOREIGN KEYC.UNIQUED.CHECKPL/SQL中,操作数据库表的常用方式有()A.使用DML语句(INSERT/UPDATE/DELETE)B.使用PL/SQL块结合游标遍历数据C.使用BULK COLLECT批量查询结果集D.使用FOR UPDATE锁定表数据关于PL/SQL中的游标,以下说法正确的有()A.显式游标需要手动声明、打开、提取和关闭B.隐式游标无需声明,执行DML或单行查询时自动创建C.SQL%ROWCOUNT是隐式游标的属性D.引用游标(Ref Cursor)可动态执行不同SQL语句以下哪些是PL/SQL中用于处理表数据的异常()A.NO_DATA_FOUNDB.TOO_MANY_ROWSC.VALUE_ERRORD.ZERO_DIVIDE第10页共18页创建表时,以下哪些操作会影响表的性能()A.为频繁查询的列创建索引B.为大量数据列设置NOT NULL约束C.不设置主键或唯一约束D.为所有列设置默认值PL/SQL中,BULK COLLECT的优点有()A.减少网络往返次数,提高效率B.可一次获取多条记录到集合中C.支持与SELECT语句结合使用D.无需声明集合类型即可使用关于PL/SQL中的%TYPE和%ROWTYPE,以下说法正确的有()A.%TYPE声明的变量类型与表列一致B.%ROWTYPE声明的变量类型与表行一致C.使用%TYPE可避免手动修改变量类型(如列数据类型变更)D.%ROWTYPE可直接存储表的一行数据以下属于DDL语句的有()A.CREATE TABLEB.DROP TABLEC.ALTER TABLED.TRUNCATE TABLEPL/SQL中,可用于控制程序流程的语句有()A.IF-THEN-ELSEB.CASEC.LOOPD.GOTO第11页共18页关于表的约束,以下说法正确的有()A.主键约束(PRIMARYKEY)确保列值唯一且非空B.外键约束(FOREIGN KEY)确保引用的列值存在于关联表中C.唯一约束(UNIQUE)允许NULL值,但值必须唯一D.非空约束(NOT NULL)确保列值不为NULLPL/SQL中,集合类型包括()A.嵌套表(Nested Table)B.数组表(Varray)C.索引表(Index-By Table)D.记录(Record)以下关于PL/SQL存储过程的描述,正确的有()A.存储过程可通过OUT参数返回多个值B.存储过程必须使用BEGIN-EXCEPTION-END结构C.存储过程可操作数据库表数据D.存储过程需先编译才能执行执行SELECT*FROMemployeesWHERE department_id=:deptno时,若:deptno未赋值,可能导致的异常有()A.NO_DATA_FOUNDB.VALUE_ERRORC.ZERO_DIVIDED.无异常(查询返回空集)PL/SQL中,可用于遍历集合的方式有()A.FOR循环(索引循环)B.FOREACH循环(适用于嵌套表)C.显式游标遍历集合第12页共18页D.直接使用集合的FIRST/LAST/NEXT方法以下关于PL/SQL异常处理的描述,正确的有()A.可使用RAISE语句主动抛出异常B.WHEN OTHERSTHEN可捕获所有未处理异常C.异常处理部分可访问SQLCODE和SQLERRM获取异常信息D.异常发生后,程序会跳转到EXCEPTION部分执行,之后继续执行后续代码创建表时,以下哪些选项会影响表的结构()A.指定列的数据类型B.添加约束C.创建索引D.设置默认值PL/SQL中,FOR UPDATE子句的作用有()A.锁定查询到的记录B.防止其他会话修改锁定的记录C.提高查询效率D.与游标结合使用时,可在循环中更新锁定记录以下关于PL/SQL与表数据交互的描述,正确的有()A.使用BULK COLLECTINTO可批量插入数据到表B.使用FORALL可批量执行DML语句C.FORALL比单条DML执行效率更高D.FORALL不支持PL/SQL集合作为参数关于PL/SQL中的记录类型(Record),以下说法正确的有()A.可使用%ROWTYPE声明记录类型B.记录类型的字段需手动声明第13页共18页C.记录类型可存储表的一行数据D.可通过记录名.字段名访问记录中的字段
三、判断题(共20题,每题1分)(正确的打“√”,错误的打“×”)PL/SQL中,%TYPE声明的变量必须在声明时初始化()嵌套表(Nested Table)的长度可以动态变化()主键约束会自动创建唯一索引()PL/SQL中,FORALL语句可用于批量执行INSERT、UPDATE、DELETE操作()BULK COLLECT只能与SELECT语句结合使用()PL/SQL中,隐式游标的SQL%ROWCOUNT在单行查询时返回1()外键约束的主表数据被删除时,若未设置ON DELETECASCADE,则子表对应数据会被自动删除()PL/SQL块中,EXCEPTION部分必须存在,否则无法处理异常()TRUNCATE TABLE语句会触发表的DELETE触发器()PL/SQL中,记录类型(Record)的字段名必须与表列名完全一致才能使用%ROWTYPE声明()索引会降低表的插入、更新效率,但会提高查询效率()PL/SQL中,RAISE_APPLICATION_ERROR可用于抛出自定义异常()%ROWTYPE声明的变量可以直接赋值给另一个%ROWTYPE变量()PL/SQL中,FOR循环遍历游标时,无需手动打开和关闭游标()创建表时,CHECK约束在Oracle12c及以上版本才支持()PL/SQL中,NULL值与任何值比较的结果都是NULL()嵌套表(Nested Table)可以作为表的列类型,也可以作为PL/SQL的变量类型()第14页共18页PL/SQL中,FORALL语句的集合参数必须是PL/SQL索引表()DELETE FROMstudents语句会回滚表中所有数据()PL/SQL中,REF CURSOR可以返回不同表的查询结果()
四、简答题(共2题,每题5分)简述在PL/SQL中使用游标遍历数据库表数据的基本步骤,并说明显式游标与隐式游标在使用场景上的区别写出创建一个包含主键、外键、唯一约束和CHECK约束的员工表(employees)的PL/SQL DDL语句,并说明各约束的作用参考答案
一、单项选择题1-5C A B CB6-10A DB A C11-15B AB AB16-20B BAB C21-25B DACC26-30A ABCA
二、多项选择题ABC
2.ABCD
3.ABCD
4.ABCD
5.ABAC
7.ABC
8.ABCD
9.ABCD
10.ABCDABCD
12.ABC
13.ACD
14.BD
15.ABDABC
17.ABD
18.ABD
19.BC
20.ACD
三、判断题×(%TYPE变量声明时可自动继承类型,无需手动初始化,未赋值默认NULL)√(嵌套表长度动态变化)第15页共18页√(主键约束会自动创建唯一索引)√(FORALL用于批量DML操作)×(BULK COLLECT也可用于其他场景,如集合初始化)√(单行查询时SQL%ROWCOUNT返回1)×(外键约束默认不自动删除子表数据,需设置ON DELETECASCADE等规则)×(EXCEPTION部分可选,无异常则跳过)×(TRUNCATE不触发DELETE触发器)√(%ROWTYPE基于表结构自动生成记录类型,字段名与表列一致)√(索引提高查询效率,但降低DML效率)√(RAISE_APPLICATION_ERROR可抛自定义异常)√(%ROWTYPE变量可直接赋值给同结构的%ROWTYPE变量)√(FOR循环遍历游标时自动管理游标生命周期)×(CHECK约束在Oracle11g及以上版本已支持)√(NULL与任何值比较结果为NULL)√(嵌套表可作为表列或PL/SQL变量类型)×(FORALL支持索引表、嵌套表等集合类型)×(DELETE可通过事务回滚,TRUNCATE不可回滚)√(REF CURSOR可动态执行不同SQL,返回不同表结果)
四、简答题游标遍历表数据的基本步骤及显隐游标区别基本步骤
①声明游标(显式游标需定义`CURSOR`,隐式游标无需声明);
②打开游标(显式游标用`OPEN`,隐式游标自动打开);
③提取数据(显式游标用`FETCH`,隐式游标无需手动提取);第16页共18页
④关闭游标(显式游标用`CLOSE`,隐式游标自动关闭)使用场景区别-**显式游标**适用于需要手动控制游标的场景(如动态SQL、复杂查询结果集处理)、需多次提取数据或判断结果集状态(如`%FOUND`、`%NOTFOUND`);-**隐式游标**适用于简单单行查询(如`SELECT...INTO`)或单条DML操作(`INSERT/UPDATE/DELETE`),无需手动管理,系统自动处理员工表(employees)创建DDL语句及约束作用CREATE TABLEemployees emp_id INTCONSTRAINT pk_emp PRIMARYKEY,--主键约束确保emp_id唯一且非空,自动创建唯一索引emp_name VARCHAR250NOT NULL,--非空约束确保emp_name有值dept_id INTCONSTRAINT fk_emp_dept REFERENCESdepartmentsdept_id,--外键约束关联部门表,确保dept_id在部门表中存在salary NUMBER10,2CONSTRAINT chk_sal CHECKsalary0,--CHECK约束确保salary为正数emp_no VARCHAR220CONSTRAINT uk_emp_no UNIQUE--唯一约束确保emp_no值唯一,允许NULL但仅一个NULL约束作用-**主键(pk_emp)**唯一标识员工,不可重复且不能为空;-**外键(fk_emp_dept)**确保员工属于已存在的部门,维护表间数据关联;第17页共18页-**唯一(uk_emp_no)**确保员工编号不重复;-**CHECK(chk_sal)**限制薪资为正数,保证数据合理性第18页共18页。
个人认证
优秀文档
获得点赞 0