版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
PLSQL高频面试题及详细答案(实战版)一、基础概念类1、简述PL/SQL是什么,以及它和普通SQL的区别?答案:PL/SQL是Oracle对标准SQL的过程化扩展语言,全称ProceduralLanguage/SQL。它在SQL非过程化查询的基础上,增加了变量、分支、循环、异常、过程、函数等程序逻辑,是面向数据库的程序编程语言。二者核心区别:SQL是非过程化:只定义“做什么”,不定义“怎么做”,单条语句执行,无逻辑控制;PL/SQL是过程化:可以编写业务逻辑,支持顺序、分支、循环、变量赋值、异常捕获,可批量执行多条SQL,完成复杂业务。2、PL/SQL的基本程序结构是什么?答案:标准四段结构,其中执行段必写,其余可选:DECLARE声明段(可选):定义变量、常量、游标、自定义类型;BEGIN执行段(必选):编写核心业务逻辑、SQL语句、逻辑控制;EXCEPTION异常段(可选):捕获并处理运行时异常;END结束段(必选):程序结束标识。示例最简结构:sql
DECLARE
v_numNUMBER;
BEGIN
v_num:=100;
DBMS_OUTPUT.PUT_LINE(v_num);
EXCEPTION
WHENOTHERSTHEN
DBMS_OUTPUT.PUT_LINE('程序异常');
END;
/3、PL/SQL中%TYPE和%ROWTYPE的作用及区别?答案:两者都是用来动态匹配数据表字段类型,避免手动定义类型导致的字段变更适配问题。%TYPE:匹配表中单个字段的数据类型。定义的变量和指定字段类型、长度完全一致。
示例:v_name%TYPE;%ROWTYPE:匹配一整行数据表结构,相当于自定义行对象,包含表中所有字段。
示例:v_rowuser%ROWTYPE;适用场景:字段后续可能修改类型、长度时,用该方式无需修改代码,兼容性更强。二、变量、流程控制类4、PL/SQL中变量赋值有几种方式?:=和INTO赋值的区别?答案:常用两种赋值方式::=直接赋值:程序内部手动给变量赋值,适用于固定值、运算后赋值;SELECT...INTO赋值:从数据表查询数据赋值给变量,必须保证查询结果有且仅有一条。核心区别::=是程序内部逻辑赋值,不操作数据库;INTO是查询数据库赋值,无数据报NO_DATA_FOUND,多条数据报TOO_MANY_ROWS异常。5、PL/SQL有哪些循环方式?各自适用场景?答案:三种常用循环:LOOP无条件循环:手动加EXIT退出条件,适用于不确定循环次数的场景;WHILE循环:先判断条件再执行,条件不成立则一次都不执行,适用于条件驱动循环;FOR循环:固定次数循环,语法简洁,自动初始化、自增、退出,适用于已知循环次数、游标遍历。6、EXIT和CONTINUE的区别?答案:EXIT:直接终止整个循环,跳出循环体,执行循环后续代码;CONTINUE:终止当前单次循环,直接进入下一次循环,不终止整体循环。三、游标相关(面试高频)7、什么是游标?游标分类及区别?答案:游标是Oracle用来管理SQL查询结果集的内存缓冲区,用来逐行读取、操作查询数据。分为两类:隐式游标:系统自动创建、自动关闭,用户无需手动操作。普通DML、单行SELECT都会触发,只能通过SQL%ROWCOUNT、SQL%FOUND等属性判断执行结果。显式游标:用户手动定义、打开、读取、关闭。用于多行结果集遍历,可以逐行处理复杂业务逻辑。8、游标常用四大属性及含义?答案:%FOUND:布尔值,最近一次读取游标有数据返回TRUE;%NOTFOUND:布尔值,最近一次读取游标无数据返回TRUE,常用于循环退出条件;%ROWCOUNT:数字,记录当前游标已读取的行数;%ISOPEN:布尔值,判断游标是否处于打开状态。9、简述游标FOR循环的优点?答案:游标FOR循环无需手动OPEN、FETCH、CLOSE,系统自动完成开启、遍历、关闭操作,代码简洁,且不会产生游标泄露,日常批量遍历数据优先使用。四、存储过程与函数10、存储过程(Procedure)和函数(Function)的核心区别?答案:这是面试最高频问题,核心区别如下:返回值不同函数必须有且仅有一个返回值;过程无返回值,可通过OUT、INOUT参数传出多个结果。调用方式不同函数可嵌入SQL语句中使用(SELECT、WHERE中);过程必须单独调用(EXEC/CALL),不能嵌入SQL。使用场景不同函数:多用于数据计算、值返回,逻辑轻量;过程:多用于复杂业务批量处理,批量增删改、事务处理、多逻辑整合。事务支持过程内部可写COMMIT、ROLLBACK;函数禁止使用事务提交回滚(普通自定义函数)。11、存储过程IN、OUT、INOUT参数区别?答案:IN(默认):输入参数,只能接收外部传入的值,过程内部不可修改,只读;OUT:输出参数,外部传入空变量,过程内部赋值,执行结束后将值返回外部;INOUT:双向参数,既可接收外部传入值,内部也可修改,最终返回修改后的值。五、异常处理12、PL/SQL异常分为哪两类?常用系统异常有哪些?答案:分为系统预定义异常和自定义异常。常用系统异常:NO_DATA_FOUND:SELECTINTO未查询到任何数据;TOO_MANY_ROWS:SELECTINTO查询出多条数据;DUP_VAL_ON_INDEX:唯一索引重复插入数据;VALUE_ERROR:数值类型不匹配、长度溢出、字符转数字失败;ZERO_DIVIDE:除数为0。13、EXCEPTION中WHENOTHERS的作用和注意事项?答案:WHENOTHERS用于捕获所有未明确指定的异常,作为兜底异常处理,避免程序直接报错终止。注意事项:必须放在所有异常判断的最后一行;生产环境必须搭配SQLERRM、SQLCODE打印异常信息,方便排查问题,不能只空捕获;不要滥用,优先捕获具体异常,兜底用OTHERS。六、事务与锁14、PL/SQL中事务的特性,以及COMMIT、ROLLBACK作用?答案:Oracle事务满足ACID特性:原子性、一致性、隔离性、持久性。COMMIT:提交事务,所有DML操作永久生效,释放锁、释放回滚段;ROLLBACK:回滚事务,撤销本次事务所有未提交操作,恢复数据原状,释放锁资源。Oracle默认事务手动提交,执行DML后不commit,数据只在当前会话生效,其他会话不可见。15、什么是行锁和表锁?PL/SQL批量操作如何避免锁表?答案:行锁:DML操作精准锁定单行数据,不影响其他行读写,粒度最小、并发最高;表锁:锁定整张表,其他会话无法修改表数据,并发极低,多为无主键、无索引更新导致。避免锁表方案:更新、删除必须带精准索引条件,避免全表扫描锁定所有行;批量数据拆分批次提交,避免长事务;禁止无WHERE条件的批量DML。七、性能调优与实战问题16、PL/SQL开发中常见的性能问题有哪些?答案:循环内嵌套SQL(FOR循环里反复查库、更新库),产生大量IO;未使用索引,全表扫描导致执行缓慢、锁表;单行循环处理批量数据,未用集合、批量绑定;长事务不提交,占用回滚段、锁资源不释放;游标使用后未关闭(非FOR游标),导致游标泄露。17、什么是批量绑定(BULKCOLLECT+FORALL)?作用是什么?答案:批量绑定是PL/SQL优化批量数据处理的核心手段,用来减少PL/SQL引擎和SQL引擎的交互次数。BULKCOLLECT:批量查询数据,一次性将多行数据读取到集合中,替代单行FETCH;FORALL:批量执行增删改,一次性提交多条DML,替代循环单行执行。普通循环是“读一行、操作一行”,频繁切换引擎;批量绑定是“一次读一批、一次操作一批”,大数据量下性能提升几十倍。18、如何避免PL/SQL游标泄露?答案:优先使用游标FOR循环,系统自动关闭;手动游标必须在结束后执行CLOSE;异常段中必须兜底关闭游标,防止异常跳出导致未关闭;定期检查open_cursors参数,避免超出最大游标数报错。八、触发器19、触发器的作用及分类?行级触发器和语句级触发器区别?答案:触发器是绑定在表/视图上的自动执行程序,当表发生增删改操作时,自动触发执行,无需手动调用。按触发级别分为:语句级触发器:一条SQL语句只触发一次,无论影响多少行,适合统计、日志记录;行级触发器(FOREACHROW):SQL每影响一行就触发一次,适合逐行数据校验、赋值、同步数据。行级触发器可使用:NEW、:OLD伪列获取新旧数据,语句级不可以。20、触发器慎用场景有哪些?答案:复杂业务逻辑不建议用触发器,隐蔽性强,排障困难;批量数据操作时,行级触发器会频繁触发,严重影响性能;容易产生触发器嵌套触发、死循环触发问题;事务不可控,报错会导致主SQL执行失败。九、综合手写题(面试实操)21、手写一个简单存储过程:根据用户ID查询用户名并输出答案:sql
CREATEORREPLACEPROCEDUREp_get_user_name(
p_user_idINNUMBER,
p_user_nameOUTVARCHAR2
)
IS
BEGIN
SELECTuser_nameINTOp_user_name
FROMt_user
WHEREuser_id=p_user_id;
EXCEPTION
WHENNO_DATA_FOUNDTHEN
p_user_name:='无此用户';
WHENOTHERSTHEN
p_user_name:='查询异常';
END;
/22、手写批量绑定示例(BULKCOLLECT+FORALL)答案:sql
DECLARE
--定义集合类型
TYPEt_id_listISTABLEOFNUMBERINDEXBYPLS_INTEGER;
v_idst_id_list;
BEGIN
--批量查询数据存入集合
SELECTuser_idBULKCOLLECTINTOv_ids
FROMt_user
WHEREstatus=0;
--批量更新
FORALLiIN1..v_ids.COUNT
UPDATEt_userSETstatus=1WHEREuser_id=v_ids(i);
COMMIT;
EXCEPTION
WHENOTHERSTHEN
ROLLBACK;
DBMS_OUTPUT.PUT_LINE(SQLERRM);
END;
/十、高频脑筋急转弯面试题23、SELECTINTO一定只能查一条数据吗?答案:普通变量SELECTINTO必须单行数据;如果使用BULKCOLLECTINTO集合,可以查询多行数据,不
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年感染控制与预防护理学模拟试题及答案
- 护士资格考试外科护理学专项训练题库及答案
- 四川省健身教练从业资格模拟试题及答案
- 2026年卫生法规与卫生监督考试模拟试题及答案
- 网络营销师认证考试用户参与度提升策略专项题库及答案
- 2026年人教版金融投资学模拟试卷及答案
- 营养师考试营养评估与评价模拟试题及答案
- 2026年公共卫生管理资格考试职业卫生与职业病学专项题库及答案
- 北师大版数学 1.1 探索勾股定理(10题型+针对训练) 同步练习 含答案
- 800台高精压力机及500台风力发电机齿轮项目可行性研究报告模板-立项申报用
- 餐饮文化与传统节日
- CJT 340-2016 绿化种植土壤
- 《炼化企业离心压缩机 干气密封技术规范》
- 频率的稳定性省公开课一等奖新名师比赛一等奖课件
- 芳香保健师-国家职业标准(2023年版)
- 三废环保管理培训
- DD 2023-02 地浸砂岩型铀矿地质调查技术要求
- 21ZJ111 变形缝建筑构造
- TD-T 1042-2013 土地整治工程施工监理规范
- 2023年国资委机械机关服务中心招聘笔试参考题库附带答案详解
- 地理科学导论第一章
评论
0/150
提交评论