PLSQL 面试题及详细答案(实战完整版)_第1页
PLSQL 面试题及详细答案(实战完整版)_第2页
PLSQL 面试题及详细答案(实战完整版)_第3页
PLSQL 面试题及详细答案(实战完整版)_第4页
PLSQL 面试题及详细答案(实战完整版)_第5页
已阅读5页,还剩3页未读, 继续免费阅读

下载本文档

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

文档简介

PLSQL面试题及详细答案(实战完整版)一、PL/SQL基础概念题1、什么是PL/SQL?它和普通SQL的区别是什么?详细答案:PL/SQL是Oracle专为数据库开发设计的过程化结构化查询语言,是对标准SQL的扩展。SQL属于结构化语言,只能执行单条查询、增删改语句,不具备逻辑处理能力;而PL/SQL加入了过程化编程特性,可以实现变量定义、条件判断、循环、异常捕获、业务逻辑封装等复杂操作。核心区别:SQL:非过程化,单句执行,无逻辑控制,主要用于操作数据库数据。PL/SQL:过程化,支持代码块封装、逻辑运算、循环判断,适合编写数据库端业务程序。2、PL/SQL的基本代码块结构是什么?各部分作用?详细答案:PL/SQL所有代码都以块为单位,标准结构分为三部分,其中执行体为必填项,声明和异常部分可选。DECLARE(声明区,可选):定义变量、常量、游标、自定义数据类型等,仅当前代码块内生效。BEGIN...END(执行区,必填):编写核心业务逻辑、SQL语句、逻辑判断、循环代码,是代码块的主体。EXCEPTION(异常处理区,可选):捕获执行过程中的报错,自定义异常处理逻辑,避免程序直接中断崩溃。标准示例:PlainText

DECLARE

v_nameVARCHAR2(20);

BEGIN

SELECTusernameINTOv_nameFROMuser_infoWHEREid=1;

DBMS_OUTPUT.PUT_LINE('用户名:'||v_name);

EXCEPTION

WHENNO_DATA_FOUNDTHEN

DBMS_OUTPUT.PUT_LINE('未查询到数据');

END;

/3、PL/SQL中常用的数据类型有哪些?详细答案:分为基础数据类型、特殊数据类型两大类,工作中高频使用的如下:字符型:VARCHAR2(可变长度字符串)、CHAR(固定长度字符串)、NVARCHAR2(支持中文可变字符串)数值型:NUMBER(通用数值,可存整数、小数)、INTEGER(整数)日期型:DATE(年月日时分秒)、TIMESTAMP(高精度时间戳)布尔型:BOOLEAN(仅PL/SQL可用,取值TRUE/FALSE/NULL,不可直接打印)特殊类型:%TYPE(引用字段数据类型)、%ROWTYPE(引用整行数据类型)4、%TYPE和%ROWTYPE的作用及使用场景?详细答案:这两个语法是为了适配数据表结构,避免手动定义类型出错,同时实现代码自适应。%TYPE:匹配数据表中单个字段的数据类型。适用于仅需要接收单个字段值的场景,表字段长度、类型修改后,变量自动适配,无需改代码。%ROWTYPE:匹配数据表一整行的结构,可接收整条数据。适用于查询整行数据、批量赋值的场景。示例:PlainText

DECLARE

v_uiduser_info.id%TYPE;--匹配id字段类型

v_rowuser_info%ROWTYPE;--匹配整张表行结构

BEGIN

SELECTidINTOv_uidFROMuser_infoWHEREid=1;

SELECT*INTOv_rowFROMuser_infoWHEREid=1;

END;

/二、PL/SQL逻辑与异常处理面试题5、PL/SQL中有哪些循环方式?区别是什么?详细答案:共三种常用循环,适配不同业务场景:LOOP无条件循环:基础死循环,必须搭配EXIT退出条件,否则无限循环,适合不确定循环次数的场景。FOR循环:固定次数循环,语法简洁,自动初始化、自增、退出,适合已知循环次数或遍历游标数据的场景。WHILE循环:条件判断循环,满足条件才执行,适合根据动态条件判断是否循环的场景。6、PL/SQL常见预定义异常有哪些?详细答案:Oracle内置了常用异常,无需手动定义,可直接捕获:NO_DATA_FOUND:查询语句无任何数据返回,最常用异常。TOO_MANY_ROWS:SELECTINTO查询出多条数据,无法赋值给单个变量。VALUE_ERROR:数值或字符串类型不匹配、长度溢出、格式错误。DUP_VAL_ON_INDEX:唯一索引字段重复插入数据,违反唯一性约束。ZERO_DIVIDE:除数为0的运算错误。7、如何自定义异常?使用场景是什么?详细答案:当内置异常无法满足业务校验需求时,需要手动定义异常,用于业务逻辑报错拦截,比如参数非法、余额不足、状态异常等。示例代码:PlainText

DECLARE

v_numNUMBER:=-1;

e_param_errorEXCEPTION;--自定义参数异常

BEGIN

IFv_num<0THEN

RAISEe_param_error;--手动触发异常

ENDIF;

EXCEPTION

WHENe_param_errorTHEN

DBMS_OUTPUT.PUT_LINE('参数不能为负数');

END;

/三、游标高频面试题8、什么是游标?游标的分类及区别?详细答案:游标是Oracle用来存储SQL查询结果集的内存区域,相当于数据缓冲区,用于逐行读取、处理查询出来的多条数据。游标分为隐式游标和显式游标:隐式游标:系统自动创建、自动关闭,无需手动声明。所有普通SELECT、DML语句都会触发隐式游标,只能通过SQL%ROWCOUNT、SQL%FOUND等属性获取执行状态。缺点是无法精细化控制数据读取。显式游标:手动声明、打开、读取、关闭。专门用于处理多行结果集,支持逐行遍历、精准控制数据处理逻辑,适合复杂批量数据处理场景。9、游标的常用属性有哪些?详细答案:适用于隐式、显式游标,核心4个属性:%FOUND:布尔值,最近一次读取数据成功返回TRUE,失败返回FALSE。%NOTFOUND:与%FOUND相反,无数据读取返回TRUE,常用于循环退出判断。%ROWCOUNT:数值型,返回当前游标已读取的数据行数。%ISOPEN:判断游标是否打开,显式游标使用较多。10、什么是参数游标?作用是什么?详细答案:参数游标是带有输入参数的显式游标,可以动态传入条件,实现游标复用。不用针对不同查询条件重复定义游标,简化代码、减少冗余,是批量动态查询的常用写法。简单示例:PlainText

DECLARE

CURSORcur_user(v_statusNUMBER)IS

SELECT*FROMuser_infoWHEREstatus=v_status;

BEGIN

--传入状态1查询有效用户

FORrow_userINcur_user(1)LOOP

DBMS_OUTPUT.PUT_LINE(row_user.username);

ENDLOOP;

END;

/11、简述批量游标(FORALL、BULKCOLLECT)的作用详细答案:普通游标逐行处理数据,每一行都会触发一次数据库交互,数据量大时效率极低。而BULKCOLLECT用于批量读取数据,将结果集一次性存入集合;FORALL用于批量执行增删改语句,一次性提交所有操作。二者搭配使用,可以大幅减少数据库交互次数,提升大批量数据处理效率,是Oracle批量数据优化的核心手段。四、存储过程与函数面试题12、存储过程和自定义函数的区别?(高频必问)详细答案:二者都是封装PL/SQL逻辑的数据库对象,核心区别如下:返回值不同:函数必须有且仅有一个返回值;存储过程无强制返回值,可通过出参返回多个结果。调用方式不同:函数可嵌入SQL语句中直接调用(SELECT、WHERE中);存储过程必须单独调用,无法嵌入SQL。用途不同:函数侧重数据计算、查询返回单个结果;存储过程侧重执行复杂业务逻辑、批量操作数据、事务处理。参数限制:函数仅支持入参;存储过程支持入参、出参、输入输出参数。13、存储过程的参数模式有几种?含义是什么?详细答案:共三种参数模式,默认模式为IN:IN(入参):默认模式,外部向过程传入参数,过程内部只读,不可修改。OUT(出参):过程内部赋值,外部接收结果,初始值为空。INOUT(输入输出参数):既可以接收外部传入的值,也可以在过程内部修改后返回给外部。14、存储过程如何调试?工作中常用排查方式?详细答案:日常开发调试主要用三种方式,贴合实际工作场景:1、在代码中加入DBMS_OUTPUT.PUT_LINE打印变量、参数、执行节点,快速定位报错位置。2、使用PL/SQLDeveloper、Navicat等工具的自带调试功能,单步执行、查看变量变化。3、查询Oracle报错日志视图USER_ERRORS,查看编译错误、语法错误详情。五、触发器面试题15、什么是触发器?触发时机有哪些?详细答案:触发器是绑定在数据表上的自动执行程序,当表发生增、删、改操作时,自动触发执行预设的PL/SQL逻辑,无需手动调用。主要用于数据校验、数据同步、日志记录、权限管控等场景。三大触发时机:BEFORE:DML执行前触发,常用于校验数据、修改入参。AFTER:DML执行后触发,常用于同步数据、记录操作日志。INSTEADOF:替代原DML操作,主要用于视图的增删改操作。16、行级触发器和语句级触发器的区别?详细答案:行级触发器(FOREACHROW):每操作一行数据,触发一次。适合逐行数据校验、逐行同步数据,支持使用:NEW、:OLD伪列。语句级触发器:无论操作多少行数据,整条SQL语句执行完成后仅触发一次。适合统计操作次数、记录批量操作日志,不支持伪列。17、:NEW和:OLD伪列的作用?适用场景?详细答案:仅用于行级触发器,用来获取数据操作前后的值::OLD:获取操作之前的旧数据。更新、删除操作可用,新增操作无值。:NEW:获取操作之后的新数据。新增、更新操作可用,删除操作无值。常用场景:数据更新前后对比、禁止修改核心字段、新增数据默认赋值、操作日志记录新旧数据。六、事务与优化面试题18、PL/SQL中的事务特性及事务控制语句?详细答案:Oracle事务遵循ACID四大特性:原子性、一致性、隔离性、持久性。常用事务控制语句:COMMIT:提交事务,所有DML操作永久生效,释放锁资源。ROLLBACK:回滚事务,撤销本次所有未提交的操作。SAVEPOINT:设置保存点,支持局部回滚,无需回滚整个事务。PL/SQL代码块默认单事务,无手动提交时,执行成功不自动提交,报错自动回滚。19、批量处理数据时,PL/SQL常见优化手段?详细答案:工作中大数据量处理核心优化点:1、禁用逐行处理,使用BULKCOLLECT+FORALL批量读写,减少数据库交互。2、避免循环内执行SELECT、DML语句,尽量将查询放在循环外。3、大批量操作时,分段提交事务,避免单次事务过大导致锁表、日志溢出。4、合理使用索引,避免游标全表扫描。5

温馨提示

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

评论

0/150

提交评论