PL-SQL常见的面试题有哪些(答案和解析介绍)

你是否正在准备 PL/SQL 面试,如果是,那么我们将在此处列出 PL/SQL 面试问题列表?
PL(过程语言)是 SQL(结构化查询语言)的扩展,其中开发人员可以使用过程、分支和迭代等控制结构、模块和函数编写复杂的数据库交互。它与 SQL 紧密集成并支持动态和静态 SQL。
除了面试中的其他问题,了解 SQL 和 PL/SQL 的不同之处也很重要。PL/SQL 相对于 SQL 的一些优点是:

  • 支持过程处理、条件语句、循环等类似于高级语言的特性。
  • 可以将多个语句以过程的形式一次发送到数据库服务器,从而节省时间和网络流量。
  • 自定义错误处理是可能的。
  • 完全便携。
除了上述优点之外,PL/SQL 还具有一些更吸引人的特性,例如函数、过程、触发器、游标,使其成为最通用的关系数据库之一。
介绍PL/SQL 1.0 于 1992 年发布,Oracle 6 作为可选扩展。正是在 PL/SQL 2.0中引入了存储过程、函数、用户定义的记录类型、表、包和扩展(如 DBMS_*)。最新的 PL/SQL 版本是 11.0,它是随 Oracle 11g 一起发布的,具有原生编译、PL/SQL 函数结果缓存和分钟依赖跟踪等高级特性。
最佳PL-SQL常见面试题和答案合集PL-SQL常见的面试题有哪些?下面是面试官在面试中会问到的一些常见的基础和高级pl/sql面试题和答案:
问题:什么是 PL/SQL?答:一种程序语言,其中代码可以在块中执行。它是 SQL 的扩展。
问题:PL/SQL 和 SQL 有什么区别?PL-SQL面试题解析:
SQLPL/SQL
SQL 是一种与数据库交互的查询语言。它是 SQL 的扩展,支持过程、函数和更多特性。
仅支持可以对表执行插入、更新、删除的简单查询。可以执行像高级编程语言这样的复杂任务,例如,while 循环、if-else 语句等……
SQL 语句一次只能执行一个,从而使其成为一个耗时的过程。整个语句块一次性发送到数据库服务器执行,节省时间,提高效率。
没有错误处理的规定。自定义错误处理是可能的。
问题:PL/SQL 的基本结构是什么?回答:
[ DECLARE] --declaration statements (optional) BEGIN --execution statements [ EXCEPTION] --exception handling statements END;

问题:定义游标及其用途。答:游标是指向Oracle 分配的用于处理SQL 语句的内存区域的指针。游标用于保存 SQL 查询返回的记录。有两种类型的游标——隐式和显式。
问题:我们为什么要使用数据库触发器?给出触发器的语法。答:触发器是一个在事件发生时自动调用的存储过程。事件可能是:插入、更新、删除等…… 语法 –
create trigger [ trigger_name] [ before | after]on [ table_name] [ for each row] [ trigger_body]

问题:如何编译 PL/SQL 代码?答:首先进行语法检查。当开发人员纠正任何语法错误时,Oracle 将所有保存数据的变量与存储地址绑定。最后,进行 p 代码生成过程。
问题:解释 PL/SQL 中的异常处理。答:  PL/SQL 提供定制的异常处理。发生错误时,程序本身会包含错误处理代码。有3种类型的例外——
  • 预定义异常 - 已定义的常见错误。示例 – NO_DATA_FOUND
  • 未定义异常 – 没有预定义名称的错误。
  • 用户定义的异常——由用户编写的代码处理。
问题:说说PL/SQL中的几种数据类型。答:有很多数据类型——
  • 标量类型——原始数据类型,如 CHAR、DATE、LONG、VARCHAR2 等……
  • 复合 - 这些由其他数据类型组成,可以轻松更新。例如,记录、表格等...
  • 引用数据类型,如 CURSOR
  • 大对象类型——BLOB、CLOB 等……
PL-SQL常见的面试题有哪些?问题:%TYPE 和 %ROWTYPE 有什么区别?举个例子。回答:
%TYPE%ROWTYPE
声明与表列的数据类型相同的变量的属性。声明与表行具有相同结构的 RECORD 类型变量的属性。该行是包含与表或视图的列具有相同数据类型名称的字段的记录。
例子 -DECLARE
studentId
students.student_id%TYPE;
例子 -DECLARE stud_rec students.%ROWTYPE;
问题:PL/SQL 包由什么组成?答:包是将函数、过程、变量等放在一个地方的模式对象。包应该有——
  • 包装规格
  • 包体
问题:列出一些使用 PL/SQL 创建的模式对象。答:数据库链接、触发器、存储过程、函数和包、视图、同义词、外部过程库、序列等……
在此处查看:  基本 SQL 命令清单
问题:各种预定义的异常是什么?答:PL-SQL常见面试题和答案合集:预定义异常是在程序执行过程中发生的内部定义异常。例如,PL/SQL 在选择操作时没有返回行时引发 NO_DATA_FOUND,如果使用选择语句返回多于一行,则会生成 TOO_MANY_ROWS 错误。还有一些例子:
  • COLLECTION_IS_NULL:当集合为空时
  • CURSOR_ALREADY_OPEN:当游标已经打开时
  • LOGIN_DENIED:登录不正确或权限不存在时
有关预定义异常的完整列表,请查看Oracle 文档。
问题:语法错误和运行时错误有什么区别?PL-SQL面试题解析:
语法错误运行时错误
这些是编译器发现的编译时错误。这些不会被编译器检测到并导致程序给出不正确的结果。
在这些问题得到解决之前,代码不会构建和运行。代码编译运行,如果出现错误,程序中途停止。
一些示例缺少分号或方括号 (; , {})、类拼写错误、关键字等。例如空指针异常、数字除以零、数组索引越界等。
int x = 9 字符串名称 = null;在第一行中,缺少一个分号,编译器将捕获该分号字符串名称 = null;   if(name.equals(“lsbin.com”)){....} 由于name为null,运行时会在执行代码时捕获异常
问题:PL-SQL 开发人员可用的各种软件包有哪些?答:可供 PL/SQL 开发人员使用的几个包是:
DBMS_ALERT当特定数据库值发生变化时,使用触发器提醒应用程序。警报是基于事务的和异步的。
DBMS_OUTPUT显示来自 PL/SQL 块、包、子程序和触发器的输出。主要用于显示 PL/SQL 调试信息。
DBMS_PIPE不同的会话使用这个包通过命名管道进行通信。过程 PACK_MESSAGE 和 SEND_MESSAGE 将消息打包到管道中,然后将其发送到另一个会话。
HTF 和 HTP允许 PL/SQL 程序生成 HTML 标签。
UTL_FILE让 PL/SQL 程序读取和写入 OS 文本文件。
UTL_HTTP允许你的 PL/SQL 程序进行超文本传输??协议 (HTTP) 标注。该包有两个入口点,每个入口点都接受一个 URL(统一资源定位符)字符串,联系指定的站点,并返回请求的数据,通常是 HTML 格式。
UTL_SMTP允许 PL/SQL 程序通过 SMTP 发送电子邮件。
来源:Oracle 文档
问题:解释字符函数?答:字符函数是操作字符数据的函数。这些更普遍地称为字符串函数。例子:
LEFT从字符串的左侧返回提到的字符数。LEFT(value, NoOfChars)LEFT('Lsbin', 3) 将给出 Lsb。
RIGHT从右边返回指定数量的字符。RIGHT(value, NoOfChars)RIGHT ('banker', 2) 将返回 er。
SUBSTRING从字符串的任何部分选择数据。SUBSTRING(value, StartPosition, NoOfChars)SUBSTRING('lsbin.com',0,5) 将返回 lsbin。
LTRIM从左侧修剪空白。LTRIM(' lsbin.com') 将返回 lsbin.com。
RTRIM从右侧修剪空白。RTRIM('lsbin.com ') 将返回 lsbin.com。
UPPER将所有字符转换为大写。UPPER('lsbin.com') 返回 LSBIN.COM。
LOWER将所有字符转换为小写。LOWER('LSBIN.COM') 返回 lsbin.com。
问题:SYSDATE 和 USER 关键字有什么用?举例说明。答:SYSDATE:返回本地数据库服务器上的当前日期和时间。语法是 SYSDATE。如果我们必须提取部分日期,那么我们使用 TO_CHAR 函数。例子:
SELECT SYSDATE FROM dual; select customer_id, TO_CHAR(SYSDATE, 'yyyy/mm/dd') from customer where customer_id < 200;

USER:  USER 返回当前会话的 user_id。
例子:
select USER from dual;

问:SGA 和 PGA 有什么区别?回答:
SGAPGA
系统全局区程序全球区
包含一个 Oracle 数据库实例的数据和控制信息包含专用于单个 Oracle 进程的数据和控制信息
组件的共享内存区域非共享内存区域
示例:缓存数据块和 SQL 区域示例:会话内存、SQL 工作区
问题:解释 Merge with Syntax 在 PL-SQL 中的使用。答:合并会减少表扫描次数,并在需要时执行并行操作。MERGE 有条件地将数据从一个表插入或更新到另一个表。例如,
MERGE INTO orders o USING customer c ON (o.cust_id = c.cust_id) WHEN MATCHED THEN UPDATE SET o.del_address = c.address WHEN NOT MATCHED THEN INSERT (cust_id, address) VALUES (c.emp_id, c.address);

在此示例中,如果找到具有匹配条件的记录,则更新同一记录的地址,否则插入新行。
问题:解释 PL-SQL 包的好处。答:使用 PL/SQL 包有很多好处:
  • 更好的代码管理,因为包为子程序提供了一个容器
  • 自顶向下的应用程序设计方法,实现和规范分离(接口)
  • 如果子程序有任何变化,则无需更改依赖对象或重新编译整个包
  • 可以指定可访问性(私有/公共),从而维护代码的安全性
  • 数据可以跨事务维护整个会话,而无需存储在数据库中
  • 在子程序的第一次调用时,整个包被加载,因此后续调用不需要磁盘 I/O,从而提供更好的性能。
问题:解释 ROLLBACK 和 ROLLBACK TO 语句之间的区别?答:  ROLLBACK 命令回滚从事务开始的所有更改。在 ROLLBACK TO 中,事务仅回滚(或撤消)到称为 SAVEPOINT 的点。SAVEPOINT 之前的事务无法撤消,即使发出命令,事务仍保持活动状态。
问题:解释过程和函数之间的区别。PL-SQL面试题解析:
功能程序
函数每次编译它被要求执行。程序已预先编译并保存。无论何时调用,它们都会执行预编译的代码。
可以从 SQL 语句中调用。不能从 SQL 语句中调用。
该函数必须返回一个值。不需要返回任何值。
一般用于计算目的。用于执行复杂的业务逻辑。
可以使用其他方法返回多个值,否则只返回一个值。可以返回多个值
返回标量数据类型。默认返回一个 int。
不能从函数调用存储过程该过程可以调用任何函数
函数可以嵌入在 select 语句中在 select 语句中,不能调用过程。
异常处理是不可能的可以在过程中定义 Try/catch 块
PL-SQL常见的面试题有哪些?问题:解释过程和触发器之间的区别。回答:
程序TRIGGER
由用户、触发器或应用程序显式调用每当数据库中发生事件时由 DBMS 执行。
可以有参数没有参数
不能处于非活动状态可以根据需要启用或禁用
创建 - 创建过程创建 - 创建触发器
问题:PL/SQL 中有哪些不同类型的游标?答:游标有两种类型——
  • 隐式游标——PL/SQL 对返回单行的 INSERT、UPDATE、DELETE 和 SELECT 语句应用隐式游标。
  • 显式游标——由程序员为返回多行的查询创建。句法-
CURSOR is SELECT statement; OPEN ; FETCH INTO ; CLOSE ;

问题:有哪些不同类型的约束?回答:
  • 不为空
  • 独特的
  • 首要的关键
  • 外键
  • 查看
问题:PL-SQL常见面试题和答案合集:触发器和约束有什么区别?回答:
触发器约束
存储为单独的对象表上的约束与表定义一起存储
触发器在事件发生时触发;因此它们在约束后被解雇约束被触发使用该表。
执行表到表比较,因此更快执行内存位置以表比较缓慢导致性能低下。
触发器是针对整个表的约束是针对表的一列
它们只是自动执行的存储过程,因此不检查数据完整性。防止重复和无效的数据条目
问题:用一个例子解释 PL/SQL 块。答:  PL/SQL 块由三部分组成:声明部分、可执行部分和异常处理部分。可执行部分是强制性的。有两种类型的块:命名块和匿名块。
命名块是存储在数据库服务器中并可重复使用的函数和过程。匿名块是一次性使用的,不存储在服务器中。例子:
DECLARE message VARCHAR2(255):= 'Welcome to PL/SQL'; byzero NUMBER; BEGINDBMS_OUTPUT.put_line (message); byzero := 1/0; EXCEPTIONWHEN ZERO_DIVIDE THEN DBMS_OUTPUT.PUT_LINE(SQLERRM); END;

问题:解释 PL/SQL 记录。答:记录包含一组各种数据类型的数据,这些数据可以作为字段相互关联。PL/SQL 支持的三种记录类型是基于表的记录、基于程序员的记录和基于游标的记录。
问题:解释提交和保存点之间的区别。回答:
COMMIT - 用于使数据库更改永久化。所有保存点都被擦除,交易结束。一旦提交,事务就不能回滚。
SAVEPOINT – 用于在事务期间设置点,程序员可以稍后回滚到该点。当有一系列事务可以分为具有保存点的组时,它会很有帮助。
问题:实参和形参有什么区别?答:用于调用过程的参数称为实参。例子 -
get_student_details(stud_name, dob); -- here stud_name and dob are actual parameters.

在主体中使用的过程头中声明的变量称为形式参数。例子 -
PROCEDURE get_student_details (dob DATE) IS – here stud_name is a formal parameter.

问题:如何使用 DECLARE 语句?答:  DECLARE 用作独立文件的第一条语句,这些文件由匿名代码块组成,这些代码块不是存储过程、函数或触发器。例子 -
DECLARE num1 NUMBER(2); num2 NUMBER(3); BEGIN -- logic goes here END;

问题:请介绍一下 SQLCODE 和 SQLERRM。答:  SQLCODE 和 SQLERRM 用于跟踪程序中未显式处理的异常。这些是全局定义的变量。SQLCODE 返回错误代码,而 SQLERRM 返回相应的错误消息。
问题:什么是回滚?它与回滚到语句有何不同?答:回滚会清除所有数据库更改,包括所有保存点。它结束一个事务。
“回滚到”将更改回滚到代码中提到的保存点。交易仍将处于活动状态。
问题:什么是IN OUT参数?答案:  IN OUT 参数模式将一个值传递给子程序并返回一个更新的值。
问题:是否可以在运行时接受用户输入?如何?回答:是的,这是可能的。使用 ACCEPT 关键字从用户那里获取输入。例子 -
接受年龄号码提示“输入你的年龄:”
问题:给出一个简单的方法来更快地运行查询。答:通过使用 ROWID。它不是物理列,而是行的逻辑地址。它包含块号、文件号和行号,从而减少 I/O 时间,从而使查询执行更快。
问题:PL/SQL 中有哪些预定义的异常?答案:  ZERO_DIVIDE、NO_DATA_FOUND、TOO_MANY_ROWS、INVALID_CURSOR、DUP_VAL_ON_INDEX 等等……
问题:如何跟踪 PL/SQL 代码?答:你可以通过 DBMS_* 方法进行跟踪,例如
  • DBMS_APPLICATION_INFO
  • 数据库管理系统_跟踪
  • DBMS_SESSION 和 DBMS_MONITOR
问题:PL/SQL 中如何限制字符串长度?答案:使用 CHAR (NUMBER) 获取变量的固定长度。示例 – CHAR (10)。如果字符串的长度小于指定的数字,它将用空格填充。
问题:PL/SQL 中 UTL_FILE 包的用途是什么?答:通过使用这个包,开发者可以得到代码在电脑上读写文件。为此,开发人员需要 DBA 用户授予访问权限。
问题:什么是 DBMS_OUTPUT 和 DBMS_DEBUG?答:两者都可以用于调试代码。DBMS_OUTPUT 将输出打印到控制台,而 DBMS_DEBUG 将其打印到日志文件。
问题:列出 PL/SQL 中的一些游标属性。回答:
  • %ISOPEN:检查游标是否打开
  • %ROWCOUNT:获取更新、删除或获取的行数。
  • %FOUND:检查游标是否已获取任何行,返回布尔值。
  • %NOT FOUND:检查游标是否已获取任何行。返回布尔值。
问:NVL的目的是什么?答案:  NVL 允许程序员用一个值替换一个 NULL 值。例子 -
NVL (occupation, ‘default’)

问题:在一张表上,可以应用多少个触发器?答:  12 是最大数目。
问题:我们如何使用 PL/SQL 实现一致性?PL-SQL面试题解析:我们可以通过设置合适的隔离级别来实现一致性。例如,为了提供读取一致性,可以将隔离级别设置为 READ COMMITTED。
问题:编写一个简单的过程,使用一些参数从数据库中选择一些记录。答案:示例代码 –
CREATE PROCEDURE get_customer_details @age nvarchar(30), @city nvarchar(10) ASBEGIN SELECT * FROM customers WHERE age = @age AND city = @city; END;

PL-SQL常见的面试题有哪些 - 问题:解释错误 ORA-03113。答案:通信通道 ORA-03113 上的文件结束错误意味着客户端和服务器通道之间的连接已断开。可能是超时,因此连接丢失。你可以通过 ping 服务器并检查连接来进行故障排除。
问题:你可以在 SELECT 语句中使用 IF 语句吗?如何?答:是的,我们可以在版本 9 及更高版本中使用 DECODE 关键字来实现。例子 -
SELECT day_of_week, DECODE (number, 0, 'Sunday', 1, 'Monday', 2, 'Tuesday', 3, 'Wednesday', 4, 'Thursday', 5, 'Friday', 6, 'Saturday', 'No match') result FROM weekdays;

问题:SYS.ALL_DEPENDENCIES 是什么?答:  SYS.ALL_DEPENDENCIES 描述了当前用户可访问的包、过程、函数、触发器之间的所有依赖关系。它显示名称、类型、dependency_type、referenced_owner 等列……
PL-SQL常见面试题和答案合集结论【PL-SQL常见的面试题有哪些(答案和解析介绍)】在本文中,我们介绍了一些最重要的 pl/sql 面试问题,这些问题肯定会让你通过最艰难的面试。如果你想深入学习这些概念并获得一些实践经验,请查看我们的 PL/SQL 教程。

    推荐阅读